使用门面时出现 403 Forbidden

问题描述

当写入用户的权限和权限时显示错误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 将返回空并被视为 false

不确定 str_is 是什么?它不是 PHP 函数,您的意思是 strcasecmpStr::is 之类的吗?

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