我有四张桌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
之外。
我是否有另一种方法可以获得给定用途的所有角色的权限集合,最好是一行?
答案 0 :(得分:0)
我还没有对它进行过测试,但我认为这样可以使用非常小的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);
进行访问。这可能不是最好的解决方案,但它应该可以解决问题。
更新代码
您可以像下面的示例一样使用访问器,这将返回权限集合。在用户模型中使用此功能
public function getPermissions($value){
$role_ids = Roles::where('user_id','=', $value)
->select(array('permission_id'))
->toArray();
return Permission::find($role_ids);
}
并像$permissions = App\User::find(1)->permissions;
一样访问它。我相信这会像你期望的那样奏效。