Laravel中User与Role多对多,Role与Permission多对多,如何根据当前User查询对应的Permission
时间: 2024-02-06 09:11:55 浏览: 26
可以使用Laravel的Eloquent关联查询来实现。假设你的User、Role和Permission模型分别为User、Role和Permission,它们之间的关联关系如下:
- User和Role:多对多关联,通过user_role表关联。
- Role和Permission:多对多关联,通过role_permission表关联。
你可以在User模型中定义一个permissions()方法,来获取当前User所拥有的所有Permission:
```php
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class, 'user_role');
}
public function permissions()
{
return $this->roles()->with('permissions')->get()->pluck('permissions')->flatten()->unique();
}
}
```
这个方法会先通过roles()方法获取当前User所拥有的所有Role,然后通过with('permissions')方法预加载每个Role所拥有的所有Permission,最后通过pluck('permissions')->flatten()->unique()方法将所有Permission合并去重,返回当前User所拥有的所有Permission。
使用方法如下:
```php
$user = User::find(1);
$permissions = $user->permissions();
```
这样就可以根据当前User查询对应的Permission了。