y814530126/laravel-permission

基于 spatie/laravel-permission 二次开发的按钮级权限管理 Laravel 扩展包。(角色、权限、菜单、按钮)

v1.0.3 2020-08-05 08:42 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:29:15 UTC


README

基于 spatie/laravel-permission 二次开发的按钮级权限管理 Laravel 扩展包。(角色、权限、菜单、按钮)。

本扩展包来自 achais/laravel-permission ,fork 此扩展目的在于 Laravel 7 的版本使用。如需在 Laravel 5.5 版本使用请使用 achais/laravel-permission 。所有代码均来自:achais/laravel-permission ,感谢 作者 achais

要求

  • "php": ">=7.2"
  • "laravel/framework": "^7.0"

安装

$ composer require hedeqiang/laravel-permission -vvv

Laravel

生成配置文件

# 如果你安装过 spatie/laravel-permission 并创建了 permission.php 请忽略这步
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

在 permission.php 对应位置中加入菜单配置信息

<?php

return [
    'models' => [
        // ...
        'role' => Hedeqiang\Permission\Models\Role::class,
        'menu' => Hedeqiang\Permission\Models\Menu::class,
    ],

    'table_names' => [
        // ...
        'menus' => 'menus',
        'role_has_menus' => 'role_has_menus',
        'menu_table' => 'menu_table',
    ],

    // guard 名称
    'role_guard_name' => 'admin',

];

生成迁移文件

# 如果你安装过 spatie/laravel-permission 并创建了 migrations 请忽略这步
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

# 这是本包提供的生成 menus 和 role_has_menus 数据库表的 migrations
php artisan vendor:publish --provider="Hedeqiang\Permission\PermissionServiceProvider" --tag="migrations"

接下来在使用 migrations 生成数据库表

php artisan migrate

用法

首先,将 Hedeqiang\Permission\Traits\HasRoles 特性添加到你的 User model(s)

use Illuminate\Foundation\Auth\User as Authenticatable;
use Hedeqiang\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    // 注意这里是 \Hedeqiang\Permission\Traits\HasRoles
    use HasRoles;

    // ...
}

关于角色和权限的操作请查看这里。 spatie/laravel-permission

关于角色和菜单的操作继续往下看。 😁😁😁

创建一个角色和菜单

use Hedeqiang\Permission\Models\Role;
use Hedeqiang\Permission\Models\Menu;

$role = Role::create(['name' => '管理员']);
$menu = Menu::create([
    'name' => '文章列表',
    'url' => '/posts',
    'type' => Menu::TYPE_MENU,
    'icon' => 'iconName',
]);

关联角色和菜单

$role->giveMenuTo($menu);
$menu->assignRole($role);

同时关联多个角色和菜单

$role->syncMenus($menus);
$menu->syncRoles($roles);

获取用户菜单树

菜单类型分为:目录、菜单、按钮
目录:无可查看的页面,仅分类使用
菜单:可查看的页面
按钮:无可查看的页面,仅在菜单页面内显示

$user = \Auth::user();

$parentId = null; // 父菜单ID (用在获取指定菜单下的子菜单树)
$showButton = false; // 是否显示按钮类型的菜单

$user->getMenuTree($parentId, $showButton);

贡献

您可以通过以下三种方式之一进行贡献:

  1. 使用 问题跟踪器 提交错误报告。
  2. 问题跟踪器 上回答问题或修复错误。
  3. 贡献新功能或更新 wiki。

代码贡献过程并不非常正式。您只需确保遵循 PSR-0、PSR-1 和 PSR-2 编码规范。任何新的代码贡献都必须附带相应的单元测试(如有适用)。

许可

MIT