如何检查我的控制器中的权限
How to check permissions in my controller
我是 Laravel 的新手,我正在自己编写一个用户管理系统。
此时,
- 我可以 CRUD 权限、角色和用户,
- 我可以像这样通过 AuthServiceProvider@boot 方法检查权限:
public function boot()
{
Gate::before( function (User $user , $permission) {
// App administrator
if($user->getPermissions()->contains('appAll'))
{
return true;
}
// Permission check
return $user->getPermissions()->contains($permission);
});
}
在我的 AdminUserController 中,我可以这样检查权限:
public function index()
{
if( Gate::check('createUser') || Gate::check('readUser') || Gate::check('updateUser') || Gate::check('deleteUser')) {
return view('userMgmt/users/index', [
'users' => User::getUsersWithRolesWithTexts()
]);
}
else
{
return redirect(route('home'))->withErrors('You do not have required permission');
}
}
效果不错。
但是
这是用以下方法包装每个控制器方法的正确方法吗:
if( Gate::check(...) ...) {
//Do what the method is supposed to do
}
else
{
return redirect(route('SOME.ROUTE'))->withErrors('FUCK ALL');
}
如果有人能给我一些想法就太好了。
坦克你
有一个名为 authorize 的控制器辅助函数,您可以从扩展 App\Http\Controllers\Controller
的控制器中的任何方法调用它。此方法接受操作名称和模型,如果用户未被授权,它将抛出异常。因此,代替 if...else
语句,它将是一行:
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// The current user can update the blog post...
}
我是 Laravel 的新手,我正在自己编写一个用户管理系统。 此时,
- 我可以 CRUD 权限、角色和用户,
- 我可以像这样通过 AuthServiceProvider@boot 方法检查权限:
public function boot()
{
Gate::before( function (User $user , $permission) {
// App administrator
if($user->getPermissions()->contains('appAll'))
{
return true;
}
// Permission check
return $user->getPermissions()->contains($permission);
});
}
在我的 AdminUserController 中,我可以这样检查权限:
public function index()
{
if( Gate::check('createUser') || Gate::check('readUser') || Gate::check('updateUser') || Gate::check('deleteUser')) {
return view('userMgmt/users/index', [
'users' => User::getUsersWithRolesWithTexts()
]);
}
else
{
return redirect(route('home'))->withErrors('You do not have required permission');
}
}
效果不错。
但是 这是用以下方法包装每个控制器方法的正确方法吗:
if( Gate::check(...) ...) {
//Do what the method is supposed to do
}
else
{
return redirect(route('SOME.ROUTE'))->withErrors('FUCK ALL');
}
如果有人能给我一些想法就太好了。 坦克你
有一个名为 authorize 的控制器辅助函数,您可以从扩展 App\Http\Controllers\Controller
的控制器中的任何方法调用它。此方法接受操作名称和模型,如果用户未被授权,它将抛出异常。因此,代替 if...else
语句,它将是一行:
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// The current user can update the blog post...
}