Laravel其他身份验证信息

时间:2016-10-27 18:29:05

标签: laravel laravel-5.3

好的,为了方便起见我有一个名为rank with rows(permissions)的表,它们是一个int,可以是1或0。 用户表有一个排名为id的行。

示例用户表: 姓名:SynteX电邮:*@**.nl等级:2

示例排名表: id:2 permToEdit:1

我可以用以下方式显示排名ID:Auth :: user() - > rank但这对我没有帮助。 我想访问这样的排名行:Auth :: user() - > rank-> permToEdit。如果运行以下查询,则可以执行以下操作:

Auth::user()->rank = DB::table('ranks')->select('color')->where([['id', '=', Auth::user()->rank],])->first();

这使它成为可能,但我必须从每个控制器和每个视图访问它。那么我该把这条线放在哪里,以便在任何地方都可以使用?

2 个答案:

答案 0 :(得分:0)

对于关系,您只需将此方法添加到用户模型

即可
public function rank()
{
    return $this->hasOne(Rank::class);
}

但对于用户的角色/权限,我建议Zizaco/entrust帮助。

答案 1 :(得分:0)

我不知道我是否理解你的问题。但在我看来,你需要一个数据透视表。

您有一张桌子:'用户'

还有一张桌子:'排名'

因此,如果你创建一个数据透视表rank_user(Laravel在这里按字母顺序工作,所以排名第一,你可以在'用户'和'排名'模型中改变它。)

首先,您需要创建数据透视表:

Schema::create(‘rank_user', function(Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->integer('rank_id');
            $table->boolean('permToEdit') // withs converts to a ‘tiny int’ in the database
});

然后在您的用户模型中,您需要创建:

public function ranks() 
    {
        return $this->belongsToMany(‘App\Rank’)->withPivot(‘permToEdit’);
    }

在你的Rank模型中:

public function users() 
    {
        return $this->belongsToMany(App\User')
            ->withPivot('permToEdit ');
    }

现在,在您的用户模型中,您可以使用以下功能

public function getPermToEdit()
{
    Return $this->ranks()->wherePivot(‘permToEdit’, true)->first(); 
}

或者如果你需要传递特定的用户ID,你可以:

public function getUserPermToEdit($user_id)
{
    Return $this->ranks()->wherePivot('user_id', $user_id)->wherePivot(‘permToEdit’, true)->first(); 
}

如果您对此一无所知,请检查: https://laravel.com/docs/5.3/eloquent-relationships 要么 https://www.youtube.com/watch?v=xIBST5vVq84&list=PLfdtiltiRHWEb-tzSN99Zy-39Y1tKl5DB