【问题标题】:show/hide (laravel) menus depending on roles根据角色显示/隐藏(laravel)菜单
【发布时间】:2016-07-15 16:20:17
【问题描述】:

我想让某些菜单选项只对某些用户可见。

我在标准身份验证框架中修改了我的用户表,添加了两个角色 - 布尔列: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 很陌生。

【问题讨论】:

  • 我认为你应该使用 $_SESSION 来检查用户名。
  • 你应该把你的函数放在你的UserController.php中。

标签: php laravel


【解决方案1】:

我首选的方法是通过 Gate Facade 进行授权。您可以像这样在 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

【讨论】:

  • 谢谢。必须在那里学习一些新东西,但这就是我来这里的目的;)干杯
【解决方案2】:

您可以在用户模型中使用Query Scopes 函数。例如在User 模型中写入您的isTeacher() 并查看检​​查

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

【讨论】:

  • 这个原理是有道理的。所以在我的用户模型中,我添加了一个函数public function scopeIsTeacher($query) {return true;},但我现在收到错误Trying to get property of non-object
  • Hmm.. 根据文档,“范围应始终返回查询构建器实例:”因此,您可以在范围内进行查询并返回结果,在视图中,您需要检查教师值..猜它不是一个优雅的解决方案。让我看看如果我能找到什么。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2018-09-20
  • 2015-05-08
  • 2023-01-02
  • 1970-01-01
  • 2021-06-20
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多