Laravel 基于角色的菜单?

Laravel menu based on role?

我有 codeigniter 背景。现在,我正在了解 laravel。所以,我处于这种情况(示例),我正在尝试创建一个具有多个用户的网络应用程序。 UsersType A ,他们可以访问菜单 a、菜单 b 和菜单 c,而 UsersType B 他们只能访问菜单 a。

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

当我使用 codeigniter 时。我创建了 4 table UsersUsersTypeMenuMenuAccess。您必须了解它是如何工作的。我只是,用查询播放它然后我展示它。

UsersType(用户)-> TypeId(用户类型)-> MenuId(菜单访问)-> MenuId(菜单)

我已经在使用 google 并且我发现了这个 https://github.com/Zizaco/entrust 但是我可以从那个包中看到什么。仅授予操作权限(输入、编辑和删除)

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

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

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

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

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

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

有多种实现方式。从本质上讲,它们所做的都是存储可以授予用户的权限,并且可以选择存储允许将权限分配给角色的角色,然后可以为用户提供该角色,自动授予他们与该角色关联的权限。

我发现 spatie/laravel-permission 看起来相当不错。然后,如果您将用户模型传递到视图中,您可以这样做:

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

这应该足够灵活,也可以针对不同的权限重复使用。如果那不能解决问题,那么使用 Laravel's authorization system 推出您自己的权限系统并不难,您应该能够以相同的方式使用 can() 方法。