Laravel 如果管理员已登录,政策和 Gate 将忽略

Laravel Policies and Gate ignore if admin is logged

我正在使用策略和门(角色 - Role_User 用户)为我的 Laravel 项目中的用户分配权限,一切正常。但是我不知道管理员帐户如何在不必为其分配所有权限的情况下执行所有操作。

// AuthServiceProvider
public function boot()
{
    $this->registerPolicies();
    $this->registerStaffPolicies();
    $this->registerTaskPolicies();
    $this->registerDepartmentPolicies();
    $this->registerPositionPolicies();
    $this->registerPermissionPolicies();
}

public function registerStaffPolicies()
{
    Gate::define('staff-view', function($user){
        return $user->hasAccess(['staff-view']);
    });
    Gate::define('staff-add', function($user){
        return $user->hasAccess(['staff-add']);
    });
    Gate::define('staff-edit', function($user){
        return $user->hasAccess(['staff-edit']);
    });
    Gate::define('staff-delete', function($user){
        return $user->hasAccess(['staff-delete']);
    });
}
// registerTaskPolicies ...

// My route
Route::get('/staff', 'StaffController@index')->middleware('can:staff-view');
Route::get('/staff/add', 'StaffController@add')->middleware('can:staff-add');
Route::post('/staff/add', 'StaffController@add')->middleware('can:staff-add');

您可以为您的管理员角色定义一个门拦截器。

Gate::before(function ($user, $ability) {
    if ($user->isAdmin()) {
        return true;
    }
});