Где я должен использовать «Врата» в Laravel 5? - PullRequest
0 голосов
/ 30 ноября 2018

Я храню список разрешений в базе данных.

У меня есть контроллер ресурса:

class UserController extends Controller {

   public function store(Request $request) {
       if (Gate::denies('create-user', User::class)) {

       }       

       /**
        when I use controller helper it throws 
        Illuminate\Auth\Access\AuthorizationException

        like this $this->authorize('create-user', User::class); 
       */

       return response()->json(User::create($request->validated()));
   }   

}

В моем случае удобнее использовать Gate :: позволяет способ, потому чтоУ меня есть определенный список разрешений.

Но как мне выбросить Подсветка \ Аутентификация \ Доступ \ AuthorizationException ?если у пользователя нет разрешения на это действие.

Я должен использовать Gate :: позволяет вместо $ this-> authorize , потому что в моем UserPolicy я должен указать имяразрешение вроде этого:

class UserPolicy
{
    use HandlesAuthorization;

     public function create(User $user)
     {
        $has = MyPermissionModel::hasAccess($user, 'create-user');
        return $has;
     }
}

Но если я использую Gates , это кажется более ясным и правильным:

class AuthServiceProvider extends ServiceProvider
{ 
    public function boot()
    { 
      Gate::define('create-user', 'App\Policies\UserPolicy@create');
    }
}

И теперь яможно проверять доступ где угодно, а не только внутри UserController .

Итак, мои вопросы:

Какой способ лучшепроверить разрешения при динамическом хранении моих разрешений в БД?

Как вывести исключение Illuminate \ Auth \ Access \ AuthorizationException?если я использую Гейтс .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...