我将权限列表存储在数据库中。
我有一个资源控制器:
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 。