我有四张 table Users[user_id] - role_user[user_id,role_id] - Roles[role_id] - Permissions[role_id]
. 用户可以有许多角色,而角色有很多权限 . 因此,Permission具有一个角色,而角色属于许多用户 .
// User.php ...
class User extends Model
{
public function roles()
{
return $this->belongsToMany('Role');
}
}
// Roles.php
class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\User');
}
public function permissions()
{
return $this->hasMany('Permission');
}
}
// Permission.php
class Permission extends Model
{
public function role()
{
return $this->belongsTo('Role');
}
}
我想真正的问题是;你可以链接关系方法,如:App \ User :: find(1) - > roles-> permissions;我不认为你可以,因为 ->roles
返回一个 Collection
而不是一个雄辩的模型,所以权限方法不存在 roles
.
有没有其他方法可以获得给定用途的所有角色的权限集合,最好是一行?
1 回答
我还没有对它进行过测试,但我认为这样可以使用非常小的twick . 在用户模型中添加此功能 .
public function getPermission($ id){
$ roles = Roles :: where('user_id','=',id) - > get();
$ permissions = array();
foreach($ roles as $ role){
array_push($ permissions,$ role-> permissions);
}
return $ permissions;
}
并以$ user-> getPermission($ user-> id);进行访问 . 这可能不是最好的解决方案,但它应该解决问题 .
UPDATED CODE
您可以像下面的示例一样使用访问器,这将返回权限集合 . 在用户模型中使用此功能
并像
$permissions = App\User::find(1)->permissions;
一样访问它 . 我相信这会像你期望的那样奏效 .