Laravel - 如何获得特定用户的Entrust角色

时间:2014-05-30 15:36:09

标签: php laravel

我正在与Laravel合作并使用 Zizaco Entrust

以管理员身份登录后,我想查看特定用户的所有角色

我搜索了一段时间,但没有发现任何线索...... 如何使用 Entrust 来实现,还是应该使用SQL查询?

2 个答案:

答案 0 :(得分:8)

在您的用户类中添加

public function roles()
{
    return $this->belongsToMany('Role','assigned_roles');
}

然后您可以获得特定用户的所有角色

$user = User::with('roles')->find(1);
$roles = $user->roles;

答案 1 :(得分:1)

如果您使用的是Zizaco \ Entrust,则在用户模型中不需要新的角色方法。角色方法已存在于EntrustUserTrait类中。用户类中只需要这一行:

use EntrustUserTrait;
像这样:

<?php
namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;

class User extends Authenticatable
{
    use EntrustUserTrait; // add this trait to your user model
            .....
}

在您的UsersController中,您可以选择具有角色的用户(索引方法):

<?php
namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Requests;

class UsersController extends Controller
{
    protected $users;

public function __construct(User $users)
{
    $this->users = $users;
    parent::__construct();
}

public function index()
{
    $users = $this->users->with('roles')->paginate(25);
    return view('users.index', compact('users'));
}

在$ users环境中的$ user-&gt;角色中循环,因为即使用户只有一个角色,$ user-&gt;角色也是集合。

@foreach($users as $user)
    @foreach($user->roles as $role)
        {{ $role->display_name }}
    @endforeach
@endforeach