根据权限管理Laravel侧边栏

问题描述 投票:1回答:5

我有多个具有多个权限的用户(管理员和用户)。例如:管理员可以看到侧栏a,b,c但是用户只能看到侧边栏d,e,f。

你能根据权限加载adminlte.php的菜单吗?我将权限存储在User表中的权限列中(isAdmin,isUser)谢谢

adminlte.php中的菜单数组格式:

'menu' => [
        [
            'text' => 'Dashboard',
            'url'  => '/dashboard',
            'icon' => 'dashboard',
        ],
],

我找到的唯一解决方案是普通的php http://seegatesite.com/how-to-create-user-permissions-view-to-dynamic-sidebar-menu-adminlte/

我更喜欢使用内置的adminlte.php的原生laravel解决方案

php laravel permissions sidebar adminlte
5个回答
1
投票

我认为使用数据库是明智的选择。但我们可以避免使用原始数据库查询并使用Laravel内置函数。

在sidebar.blade.php(或其他模板/视图文件)中,您可以从数据库中获取权限,然后使用它们来显示您的特定菜单,如:

 @if(Auth::user()->permission_1)
     <li><a href=""><i class="fa fa-group"></i> menu-item_1</a></li>
 @endif
 @if(Auth::user()->permission_2)
     <li><a href=""><i class="fa fa-tasks"></i> menu-item_2</a></li>
 @endif

1
投票

我最终只是在page.blade.php中使用两个不同的视图对每个权限进行硬编码

@if(config('adminlte.layout') != 'top-nav')
        <aside class="main-sidebar">
            <!-- sidebar: style can be found in sidebar.less -->
            <section class="sidebar">
                <!-- Sidebar Menu -->
                <ul class="sidebar-menu">
                    <!-- Left side column. contains the logo and sidebar -->
                    @if (Auth::user()->role == "isAdmin")
                        @include('layouts.sidebar_admin_menu')
                    @elseif (Auth::user()->role == "isNormalUser")
                        @each('adminlte::partials.menu-item', $adminlte->menu(), 'item')
                    @endif
                </ul>
                <!-- /.sidebar-menu -->
            </section>
            <!-- /.sidebar -->
        </aside>       
    @endif

这不是理想的,但它暂时运作良好..

更理想和更整洁的解决方案是将每个权限(创建,更新,删除,读取)存储到具有布尔值的数据库中。

最令我惊讶的是,adminlte作为最流行的侧边栏框架之一,没有侧边栏权限的原生功能..


0
投票

我认为你应该尝试这个包来实现你需要的:https://github.com/Zizaco/entrust。这是一个用于处理基于角色的权限的laravel包。无论如何,如果您使用此软件包,则需要更改一些代码。

希望能帮助到你。


0
投票

我整合了Laravel-AdminLTE

到我的项目。使用此插件权限可以如下所示:

'can' => 'add-blog-post'

这是一个例子:

'menu' => [
    'MAIN NAVIGATION',    
    [
        'text' => 'Pages',
        'url' => 'admin/pages',
        'icon' => 'file',
        'can' => 'add-blog-post'
    ],      
],

0
投票

您可以按照自述文件中的“运行时菜单配置”项进行操作。

  1. 在config / adminlte.php内设置'menu'=> []编辑
  2. 列出项目app \ Providers \ AppServiceProvider.php启动方法
    <?php

    namespace App\Providers;

    use Illuminate\Support\ServiceProvider;
    use Illuminate\Contracts\Events\Dispatcher;
    use JeroenNoten\LaravelAdminLte\Events\BuildingMenu;
    use \App\User;

    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot(Dispatcher $events)
        {
            $events->listen(BuildingMenu::class, function (BuildingMenu $event) {
                $event->menu->add('MAIN NAVIGATION');
                $event->menu->add([
                    'text'        => 'Users',
                    'url'         => 'admin/users',
                    'icon'        => 'users',
                    'label'       => User::count(),
                    'label_color' => 'success',
                ]);
            });
        }

        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.