我有多个具有多个权限的用户(管理员和用户)。例如:管理员可以看到侧栏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解决方案
我认为使用数据库是明智的选择。但我们可以避免使用原始数据库查询并使用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
我最终只是在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作为最流行的侧边栏框架之一,没有侧边栏权限的原生功能..
我认为你应该尝试这个包来实现你需要的:https://github.com/Zizaco/entrust。这是一个用于处理基于角色的权限的laravel包。无论如何,如果您使用此软件包,则需要更改一些代码。
希望能帮助到你。
我整合了Laravel-AdminLTE
到我的项目。使用此插件权限可以如下所示:
'can' => 'add-blog-post'
这是一个例子:
'menu' => [
'MAIN NAVIGATION',
[
'text' => 'Pages',
'url' => 'admin/pages',
'icon' => 'file',
'can' => 'add-blog-post'
],
],
您可以按照自述文件中的“运行时菜单配置”项进行操作。
<?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()
{
//
}
}