2016-07-15 61 views
0

我希望某些菜单选项仅对某些用户可见。根据角色显示/隐藏(laravel)菜单

我通过添加两个角色 - 布尔列:isTeacherisOnCommittee修改了标准身份验证框架中的用户表。

我想我会尝试

  1. 在我的控制器创建一个方法来检查,如果登录的用户拥有特定的角色,然后在视图
  2. ,调用该方法,并显示菜单选项,(或不)。

@if (Auth::iSTeacher())放到我的视野中,这是一切都很好,但我在哪里放我的功能?

我所做的所有文件guest()搜索,发现这个

...\vendor\laravel\framework\src\Illuminate\Contracts\Auth\Guard.php: 
public function guest(); 

/** 
* Get the currently authenticated user. 
* 
* @return \Illuminate\Contracts\Auth\Authenticatable|null 
*/ 

我明白了保护的目的是保护路径,所以这不是它的地方。

我应该在哪里创建我的功能?

(如果你没有猜 - 我很新的laravel

+0

我认为你应该使用$ _SESSION来检查用户名。 –

+0

你应该把你的函数放在你的'UserController.php'中。 –

回答

1

我要做到这一点首选方法是通过门门面授权可以在AuthServiceProvider定义所谓的“能力”是这样的:

public function boot(GateContract $gate) 
{ 
    $this->registerPolicies($gate); 

    $gate->define('update-post', function ($user, $post) { 
     return $user->id === $post->user_id; 
    }); 
} 

比里面的观点,你可以检查:

@can('update-post', $post) 
    <a href="/post/{{ $post->id }}/edit">Edit Post</a> 
@endcan 

来源: https://laravel.com/docs/5.2/authorization#within-blade-templates

+1

谢谢。必须在那里学习一些新的东西,但这就是我在这里;)干杯 – Maxcot

0

您可以在用户模型中使用Query Scopes功能,例如写你isTeacher()User模型,并考虑检查

@if(Auth::user()->isTeacher) 
    YOUR CODE HERE 
@end if 
+0

这个原理是有道理的。所以在我的用户模型中,我添加了一个函数'public function scopeIsTeacher($ query) {return true;}'但是我现在收到错误'尝试获取非对象的属性' – Maxcot

+0

嗯..根据文档,'范围应该总是返回一个查询构建器实例:'所以,你可以在范围内做你的查询并返回结果,并在视图中,你需要检查教师的价值..猜测它不是一个优雅的解决方案。让我看看如果我能找到任何东西。 –