使用 gate facade 时获取 403 Forbidden

Getting 403 Forbidden while using gate facade

写入用户权限时显示错误:403 Forbidden

控制器代码

class IndexController extends AdminController
{
    public function __construct(){

        parent::__construct();

        if (Gate::denies('VIEW_ADMIN')) {
            abort(403);
        }

        $this->template = env('THEME').'.admin.index';
 }

AuthServiceProvider 代码

public function boot()
{
    $this->registerPolicies();

   Gate::define('VIEW_ADMIN', function($user){
        return $user->canDo('VIEW_ADMIN');
    });

    //
}

模型用户代码

User模型关联了Roles模型,Roles模型关联了Permission模型。

public function canDo($permission, $require = FALSE){

    if (is_array($permission)) {
        dump($permission);
    }
    else{
        foreach ($this->roles as $role) {
           foreach ($this->permissions as $permission) {
               if (str_is($permission,$permission->name)) {
                   return true;
               }
           }
        }
    }        
}

您的 Gate 定义和注册似乎没有问题,我怀疑错误出在您的 canDo 功能上。

忽略 if(is_array($permission)) 检查:

// does the user have any roles?
foreach ($this->roles as $role) {
    foreach ($this->permissions as $permission) {
        // what is str_is? It's not a PHP function
        if (str_is($permission, $permission->name)) { 
            return true;
        }
    }
}

检查 user 是否有任何 roles,如果没有,则 canDo 将 return 为空并被视为 false

不确定 str_is 是什么?这不是 PHP 函数,您的意思是像 strcasecmp or maybe Str::is 吗?

我怀疑没有角色,否则你不会得到 403,相反你可能会得到 Call to undefined function str_is() 错误。