hexters/rolevel

此包已 废弃 并不再维护。作者建议使用 hexters/rolevel 包代替。

laravel 的角色与权限系统

1.1.0 2020-03-05 03:38 UTC

This package is auto-updated.

Last update: 2023-10-17 00:09:08 UTC


README

用于在 laravel 中处理角色和权限的包

需求

  • Bootstrap 4

安装

您可以通过 composer 安装此包

$ composer require hexters/rolevel

发布供应商

$ php artisan vendor:publish --tag=rolevel

将特性和到您的 User 模型

<?php

namespace App;

. . .

use Hexters\Rolevel\RolevelModelTrait;

class User extends Authenticatable {

    use Notifiable, RolevelModelTrait;

    . . .

迁移 rolevel 数据库

$ php artisan migrate

入门

app/Roles/menu_and_permissions.php 文件中打开文件菜单和权限。您可以在该文件中设置菜单和权限,以便为您的应用程序模块提供访问权限,例如。

<?php

  return [
    [
      'display' => 'Menu Access', // display name
      'gate' => 'module.access.index', // must uniq
      'url' => null, // URL can set null if menu have submenu
      'classId' => '', // id attribute
      'className' => '', // class style attribute
      'classIcon' => '', // font icon code

      /*
      | ------ Submenu ------
      */
      'childs' => [
        [
          'display' => 'Assign Permissions',
          'gate' => 'module.access.assign.permission.index',
          'url' => '/admin/assign/permission',
          'classId' => '',
          'className' => '',
          'classIcon' => '',

          'permissions' => [
            [
              'gate' => 'module.access.assign.permission.show',
              'name' => 'Detail Permissions', // title
              'description' => 'Show detail for permission' // info description
            ],

            [
              // More permission...
            ]
          ]
        ],

        [
          // More submenu...
        ]
      ]
    ],

    [
      // More menu...
    ]
  ];

之后,请将脚本放入您的 master 布局中,以显示菜单访问权限。

@if(auth()->check())
  @php
      $permissions = auth()->user()->permissions();
      $viewMenu = function($menus) use (&$viewMenu, $permissions) {
          $html = '';
          foreach($menus as $menu) {
              if(in_array($menu['gate'], $permissions)) {
                  $html .= view('vendor.rolevel.menu', ['menu' => $menu, 'view' => $viewMenu]);
              }
          }
          return $html;
      }
  @endphp

  <ul>
      <li><a href="{{ url('/dashboard') }}">Dashboard</a></li>
      {!! $viewMenu(rolevel()->menus()) !!}
  </ul>
@endif

@yield('content')

您可以为菜单自定义样式,打开 resources/views/vendor/rolevel/menu.blade.php 中的 blade 文件

您应该在之前为您的用户账户分配角色。

  $user = App\User::find(1);
  $role = App\Role::find(1);

  $user->roles()->sync([ $role->id ], false);

在您的任何控制器中,您应该声明 Gate 以提供对您模块的访问权限,例如

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;

class MenuAccessController extends Controller {

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
      /**
      * Get module.access.assign.permission.index from gate in file menu_and_permissions.php
      */
      if(Gate::denies('module.access.assign.permission.index')) abort(403);

      return view('access.index');
    }

    . . .

在您的 blade 中

@can('module.access.assign.permission.store')
  <a href="{{ url('/admin/account/create') }}">Create Account</a>
@endcan

// OR

if($user->can('module.access.assign.permission.store')) {
  // Condition
}

您可以查看 此链接此链接

检查 config/rolevel.php 中的配置文件,如果您有如下更改

  • 模型角色位置
  • 链接管理员前缀
  • 访问模块分配的中间件
  • 模板引用

默认情况下,您可以在 https://:8000/admin/roles 访问模块分配权限