Я создаю API, в котором я позволяю пользователям читать некоторые данные из базы данных, но я хочу запретить доступ к некоторым столбцам в моей таблице.
Например, есть разрешение users.show.name_of_example_column
, котороедолжен иметь доступ к столбцу name_of_example_column
в users
таблице.
Spatie / Laravel-Permission отвечает за ассоциирование пользователей с разрешениями и ролями в моем API.
Пользователи в моей системе имеют 2 разрешения:
users.show.id
users.show.name
Администраторы имеют все разрешения.
Я уже сделал пример, чтобы показать вам, какой результат я хочу (в зависимости от моей роли).
public function index($perPage = 30)
{
$user = Auth::User();
$fields = [];
if($user->hasPermissionTo('users.show.id')) {
$fields[] = 'id';
}
if($user->hasPermissionTo('users.show.name')) {
$fields[] = 'name';
}
if($user->hasPermissionTo('users.show.email')) {
$fields[] = 'email';
}
return User::Select($fields)->paginate($perPage);
}
Конечно,этот пример плохая практика.Должен ли я сделать это в модели пользователя через аксессоры или, может быть, где-то еще?Какой правильный путь?Есть идеи?
ОБНОВЛЕНИЕ
Я пытался проверить разрешение в средствах доступа
Вот пример
public function getEmailAttribute($value)
{
if(Auth::User()->hasPermissionTo('users.show.email')) {
return $value;
}
return false;
}
но когда этовозвращает false
, это не отменяет (удаляет) атрибут 'email' из коллекции.Он просто заменяет исходное значение на «ложь».