Witam,
Zastanawiam się nad profesjonalnym sposobem sprawdzania czy użytkownik posiada odpowiednią permisję do odczytywania specyficznego pola modelu. Wyjaśnię dokładnie o co mi chodzi.
Mam prostą funkcję, która zwraca wszystkich userów z bazy danych
public function index($perPage = 30)
{
return User::Select('id', 'name', 'email')->paginate($perPage);
}
lecz jednak chciałbym, dać dostęp do emaili z bazy danych tylko administratorom, którzy mają do tego odpowiednie uprawnienia, a zwykłym użytkownikom umożliwić jedynie dostęp do pól 'id' i 'name'.
Napisałem do tego tą funkcje po swojemu, Każda jedna permisja daje dostęp tylko do jednego pola.
Zwykłe usery mają domyślnie 2 permisje "users.show.id" i "users.show.name" a administratorzy wszystkie.
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);
}
Nie jest to dobra praktyka, bo gdyby model miał więcej pól to bym musiał robić te ify na 100 linijek w kontrolerze stąd moje pytanie czy jest na to lepszy sposób?