Laravel菜单基于角色?

时间:2017-11-05 15:51:10

标签: laravel laravel-5 laravel-5.5

我有codeigniter背景。现在,我正在学习laravel。所以,我在这种情况下(例子),我正在尝试创建一个拥有多个用户的webapp。用户类型A,他们可以访问菜单a,菜单b&菜单c和用户类型B只能访问菜单a。

现在,我正在使用https://github.com/lavary/laravel-menu。好吧,如果它只有两种类型,我可以手动编写。但是,如果有五种类型的用户或更多用户怎么办?

当我使用codeigniter时。我创建了4个表UsersUsersTypeMenu& MenuAccess。你必须了解它是如何工作的。我只是用查询播放然后我展示它。

UsersType(用户) - > TypeId(UsersType) - > MenuId(MenuAccess) - > MenuId(菜单)

我已经使用谷歌了,我发现了这个https://github.com/Zizaco/entrust,但我可以从那个包中看到。它仅授予操作权限(输入,编辑和删除)

那么,我可以在我的laravel中使用codeigniter方式吗?保存我的路线属性,而不是在rouotes/web.php中显示它(我不知道是否可能,还没有尝试过)。对不起我的英文。

2 个答案:

答案 0 :(得分:3)

我要做的是在User类中放置一个函数,该函数检查它自己的权限,然后返回一个包含用户有权访问的菜单的视图。

public function menu()
{
    switch($this->role) {
        case 'admin':
            return view('menus.admin');
        [etc]
    }
}

然后在视图中检查用户是否已登录并显示菜单:

@if Auth::check()
    {{ Auth::user->menu() }}
@endif

答案 1 :(得分:3)

正如评论中所提到的,听起来你想要的是根据用户是否具有某些权限来有条件地显示内容的能力。

有很多这方面的实现。基本上他们所做的是存储可以授予用户的权限,并且可选地存储允许将权限分配给角色的角色,然后可以为用户授予该角色,自动授予他们与该角色相关联的权限。

我发现spatie/laravel-permission看起来非常好。然后,如果将用户模型传递到视图中,则可以执行以下操作:

@if ($user->can('edit-posts'))
<a>Edit post</a>
@endif

这应该足够灵活,它也可以重用于不同的权限。如果这不起作用,那么使用Laravel's authorization system推送自己的权限系统并不困难,您应该能够以相同的方式使用can()方法。