Laravel 4:拥有多对多关系时的身份验证


Laravel 4 : Authentication when having a many to many relationship

我有一个用户、角色和role_users表。在roles表中,我有一个user和admin值。现在,我希望能够在用户的角色为admin时编辑用户。我不知道如何访问laravel中的role_name == 'admin'。

当我使用这个时,它工作了:

 @if(Auth::user()->user_username == 'Gilko')

但是我希望能够访问这个role_name == 'admin'

role_users迁移

public function up()
    {
        Schema::create('role_users', function($table)
        {
            $table->increments('role_user_id');
            $table->integer('role_id')->unsigned();
            $table->integer('user_id')->unsigned();
        });
        Schema::table('role_users', function($table)
        {
            $table->foreign('role_id')
                ->references('role_id')->on('roles');
            //->onDelete('cascade');
            $table->foreign('user_id')
                ->references('user_id')->on('users');
            //->onDelete('cascade');
        });
    }

用户模型:

class User extends Eloquent implements UserInterface, RemindableInterface  {
   protected $table = 'users';
   protected $primaryKey = 'user_id';
   protected $hidden = ["password"];
   public function getAuthIdentifier()
   {
       return $this->getKey();
   }
   public function getAuthPassword()
   {
       return $this->user_password;
   }
   public function getReminderEmail()
   {
       return $this->email;
   }
   public function user()
   {
       return $this->hasMany('Checklist', 'user_id', 'user_id');
   }
   public function roles(){
       return $this->belongsToMany('Role', 'role_users', 'user_id', 'role_id');
   }
   public function getRememberToken()
   {
       //return $this->remember_token;
   }
   public function setRememberToken($value)
   {
       //$this->remember_token = $value;
   }
   public function getRememberTokenName()
   {
       //return 'remember_token';
   }
}

您应该能够这样做:

if (Auth::user()->roles()->where('name', 'admin')->first())

如果没有结果,first将返回null。

也可以使用firstOrFail: http://laravel.com/docs/eloquent

try (Auth::user()->roles()->where('name', 'admin')->firstOrFail()) {
    // User has admin role
} catch (ModelNotFoundException $e) {
    // User doesn't have admin role
}

编辑刚刚意识到我有一个脑屁。更正代码:-)

你可以添加一个函数来检查你的用户模型…

public function isAdmin()
{
    return (bool)$this->roles()->where('name', 'admin')->count();
}

然后你可以很容易地使用…

@if(Auth::user()->isAdmin())