根据角色显示/隐藏(laravel)菜单

时间:2016-07-15 08:04:57

标签: php laravel

我希望某些菜单选项仅对某些用户可见。

我通过添加两个角色 - 布尔列:isTeacherisOnCommittee来修改标准auth框架中的用户表。

我以为我会尝试

  1. 在我的控制器中创建一个方法,以检查登录用户是否具有特定角色,然后
  2. 在视图中,调用方法,并显示菜单选项(或不显示)。
  3. @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很新。

2 个答案:

答案 0 :(得分:2)

我首选的方法是通过Gate Facade进行授权。您可以在AuthServiceProvider中定义所谓的“能力”,如下所示:

SubclassOfString[]

您可以查看内部视图:

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

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

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

答案 1 :(得分:0)

您可以在用户模型中使用Query Scopes功能。例如在isTeacher()模型中编写User并在视图中检查

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