【问题标题】:Getting 403 Forbidden while using gate facade使用门面时获得 403 Forbidden
【发布时间】:2021-04-02 07:31:53
【问题描述】:

写入用户权限时显示错误: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;
               }
           }
        }
    }        
}

【问题讨论】:

    标签: laravel laravel-facade


    【解决方案1】:

    您的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 函数,您的意思是 strcasecmp 还是 Str::is

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

    【讨论】:

      猜你喜欢
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2016-04-29
      • 2021-03-24
      相关资源
      最近更新 更多