在Laravel 5中应该在哪里使用“门”?

时间:2018-11-30 07:28:53

标签: php laravel-5

我将权限列表存储在数据库中。

我有一个资源控制器:

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 :: allows 方式更为方便,因为我具有特定的权限列表。

但是我怎么扔              Illuminate \ Auth \ Access \ AuthorizationException ?如果用户无权执行此操作。

我必须使用 Gate :: allows 而不是 $ this-> authorization ,因为在我的 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?如果我使用 Gates

0 个答案:

没有答案