问题描述
当写入用户的权限和权限时显示错误: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 函数,您的意思是 strcasecmp
或 Str::is
之类的吗?
我怀疑没有角色,否则您不会得到 403
,而是可能会得到 Call to undefined function str_is()
错误。