gpt4 book ai didi

php - Laravel 门 : Authorization doesn't work

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:08 25 4
gpt4 key购买 nike

我正在尝试进行 laravel 基本授权。我正在使用 gate 进行 laravel 授权。

表结构

User Table, Permission Table, Role, role_permission table 

user : id, name , password, email
permission : id, name
role:id , name
role_permission: id, role_id, permission_id

authServiceProvider

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

foreach($this->getPermissions() as $permission)
{
$gate->define($permission->name,function($user) use($permission){
return $user->role->id == $permission->role_id;
});
}
}

public function getPermissions()
{

$permissions = \DB::table('role_permission')
->join('permissions', 'permissions.id', '=', 'role_permission.permission_id')
->select('role_permission.*','permissions.*')
->get();
return $permissions;

}

它不能正常工作意味着我无法访问该路由,尽管它在适当用户的权限表中。

最佳答案

您不应从服务提供商处访问数据库。始终尝试让您的服务提供商保持简单。请按照以下步骤来实现您的目的。

AuthServiceProvider.class

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

$gate->before(function($user, $ability) {

return $user->hasPermission($ability);
});

}

现在在 App\User 模型中添加以下方法。

public function hasPermission($name)
{
$permission = Permission::where('name','=', $name)->first();
if(! $permission) {
return false;
}

return $this->hasRole($permission->roles);
}

public function hasRole($role)
{
if (is_string($role)) {
return $this->roles->contains('name', $role);
}

return (bool) $role->intersect($this->roles)->count();
}

希望这能达到您的目的。

关于php - Laravel 门 : Authorization doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42109092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com