chhilltvpack/permissionmanager

使用 Backpack CRUD 为 Laravel 5 提供的用户和权限管理界面。

dev-main 2023-11-28 12:16 UTC

This package is not auto-updated.

Last update: 2024-10-02 14:59:44 UTC


README

Latest Version on Packagist Software License Build Status Quality Score Style CI Total Downloads

spatie/laravel-permission 的管理界面。允许管理员使用 Laravel Backpack 容易地添加/编辑/删除用户、角色和权限。

与其他一些包相比

  • 一个用户可以有多个角色;
  • 一个用户可以有额外的权限,除了他在角色上的权限外;

此包只是 spatie/laravel-permission 的用户界面。它将安装它,并允许您在代码中使用其 API。请参阅他们的 README 以获取有关如何在代码中使用更多信息的说明。

Edit a user in Backpack/PermissionManager

安全更新和重大更改

订阅 Backpack 通讯,以便您可以了解有关任何安全更新、重大更改或主要功能的最新信息。我们每 1-2 个月发送一封电子邮件。

安装

  1. 此包假定您已经安装了 Backpack for Laravel。如果您还没有安装,请先 安装 Backpack

  2. 在您的终端中

composer require backpack/permissionmanager
  1. 完成 spatie/laravel-permission 的所有安装步骤,它已被作为依赖项拉取。运行其迁移。发布其配置文件。很可能是这样的:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
php artisan migrate
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
// then, add the Spatie\Permission\Traits\HasRoles trait to your User model(s)
  1. 发布 backpack\permissionmanager 配置文件及迁移
php artisan vendor:publish --provider="Backpack\PermissionManager\PermissionManagerServiceProvider" --tag="config" --tag="migrations"

注意: 我们建议您只发布配置文件和迁移,但您也可以发布语言和路由。

  1. 运行迁移
php artisan migrate
  1. 此包假定可以使用默认的 Backpack 用户模型(很可能是 App\Models\User 以管理用户。如果您想使用不同的模型,请在 config/backpack/permissionmanager.php 文件中更改用户模型。任何您正在使用的模型,请确保它正在使用 CrudTraitHasRoles 特性。
<?php namespace App\Models;

use Backpack\CRUD\app\Models\Traits\CrudTrait; // <------------------------------- this one
use Spatie\Permission\Traits\HasRoles;// <---------------------- and this one
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable
{
    use CrudTrait; // <----- this
    use HasRoles; // <------ and this

    /**
     * Your User Model content
     */
  1. (可选)在 resources/views/vendor/backpack/base/inc/sidebar_content.blade.phpmenu.blade.php 中为其添加菜单项
<!-- Users, Roles, Permissions -->
<li class="nav-item nav-dropdown">
    <a class="nav-link nav-dropdown-toggle" href="#"><i class="nav-icon la la-users"></i> Authentication</a>
    <ul class="nav-dropdown-items">
        <li class="nav-item"><a class="nav-link" href="{{ backpack_url('user') }}"><i class="nav-icon la la-user"></i> <span>Users</span></a></li>
        <li class="nav-item"><a class="nav-link" href="{{ backpack_url('role') }}"><i class="nav-icon la la-id-badge"></i> <span>Roles</span></a></li>
        <li class="nav-item"><a class="nav-link" href="{{ backpack_url('permission') }}"><i class="nav-icon la la-key"></i> <span>Permissions</span></a></li>
    </ul>
</li>
  1. (可选)如果您想在 Backpack 路由中使用 @can 处理器,您可以

(7.A.)将 Backpack 更改为使用默认的 web 守卫而不是它自己的守卫。在 config/backpack/base.php 中更改

    // The guard that protects the Backpack admin panel.
    // If null, the config.auth.defaults.guard value will be used.
-   'guard' => 'backpack',
+   'guard' => null,

注意

  • 当您添加新角色和权限时,数据库中保存的守卫将是 "web";

或者

(7.B.)通过在 config/backpack/base.php 文件中添加以下内容来为所有 Backpack 路由添加中间件

    // The classes for the middleware to check if the visitor is an admin
    // Can be a single class or an array of clases
    'middleware_class' => [
        App\Http\Middleware\CheckIfAdmin::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+       Backpack\Base\app\Http\Middleware\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,
    ],

为什么? spatie/laravel-permission 使用 Auth 门面对 @can 确定权限。 Auth 门面使用在 config/auth.php 中定义的默认守卫,而不是我们的 backpack 守卫。

请注意

  • 这将使 auth() 返回与 Backpack 路由上的 backpack_auth() 完全相同的结果;
  • 您只需要这个,如果您想使用 @can;您也可以使用 @if(backpack_user()->can('read')),这做的是完全相同的事情,但 100% 的情况下都能工作;
  • 当您添加新角色和权限时,数据库中保存的守卫将是 "backpack";
  1. [可选] 在您定义角色或权限后,使用 config/backpack/permissionmanager.php 中的配置文件来禁止对您的角色或权限进行创建/更新。请注意,代码中使用名称引用权限和角色。如果您允许管理员编辑这些字符串,并且他们确实编辑了,那么您的权限和角色检查将停止工作。

自定义 UserCrudController

如果您想为此包提供的默认用户控制器添加更多字段,可以将自己的控制器绑定以覆盖此包中提供的控制器

// in some ServiceProvider, AppServiceProvider for example

$this->app->bind(
    \Backpack\PermissionManager\app\Http\Controllers\UserCrudController::class, //this is package controller
    \App\Http\Controllers\Admin\UserCrudController::class //this should be your own controller
);

// this tells Laravel that when UserCrudController is requested, your own UserCrudController should be served.

API 使用

由于此包需要 spatie/laravel-permission,因此 API 将相同。请参阅他们的 README 文件以获取完整的 API。以下是摘要:

使用权限

可以将权限授予用户

backpack_user()->givePermissionTo('edit articles');

可以从用户中撤销权限

backpack_user()->revokePermissionTo('edit articles');

您可以测试用户是否具有权限

backpack_user()->hasPermissionTo('edit articles');

保存的权限将与 Illuminate\Auth\Access\Gate-class 注册。因此,您可以使用 Laravel 的默认 can-function 测试用户是否具有权限。

backpack_user()->can('edit articles');

使用角色和权限

可以将角色分配给用户

backpack_user()->assignRole('writer');

可以从用户中移除角色

backpack_user()->removeRole('writer');

您可以确定用户是否具有特定的角色

backpack_user()->hasRole('writer');

您还可以确定用户是否具有给定的角色列表中的任何一个

backpack_user()->hasAnyRole(Role::all());

您还可以确定用户是否具有给定的角色列表中的所有角色

backpack_user()->hasAllRoles(Role::all());

assignRole、hasRole、hasAnyRole、hasAllRoles 和 removeRole 函数可以接受一个字符串、一个 Role-object 或一个 \Illuminate\Support\Collection-object。

可以将权限授予角色

$role->givePermissionTo('edit articles');

您可以确定角色是否具有特定的权限

$role->hasPermissionTo('edit articles');

可以从角色中撤销权限

$role->revokePermissionTo('edit articles');

givePermissionTo 和 revokePermissionTo 函数可以接受一个字符串或一个 Permission-object。

保存的权限和角色也注册到 Illuminate\Auth\Access\Gate-class。

backpack_user()->can('edit articles');

使用 blade 指令

此包还添加了 Blade 指令以验证当前登录用户是否具有给定的角色列表中的所有或任何一个。

@role('writer')
    I\'m a writer!
@else
    I\'m not a writer...
@endrole
@hasrole('writer')
    I\'m a writer!
@else
    I\'m not a writer...
@endhasrole
@hasanyrole(Role::all())
    I have one or more of these roles!
@else
    I have none of these roles...
@endhasanyrole
@hasallroles(Role::all())
    I have all of these roles!
@else
    I don\'t have all of these roles
@endhasallroles

您可以使用 Laravel 的原生 @can 指令来检查用户是否具有特定的权限。

从 3.x 升级到 4.x

要从 PermissionManager 3.x 升级到 4.x

  • 升级到 spatie/laravel-permission 2.28.2+ - 请注意数据库已更改,并且它们不提供更改跟踪;
  • 在您的 composer.json 文件中要求 backpack/permissionmanager 版本 4.0.*
  • 删除您的旧 config/backpack/permissionmanager.php 文件;
  • 按照上面的安装步骤操作;

如果您正在升级到 Laravel 8 安装,请注意用户模型可能已从 App\User::class 移动到 App\Models\User::class,请检查您的配置是否与该更改兼容 config/backpack/permissionmanager.php

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

覆盖功能

如果您需要修改项目中此功能的工作方式

  • 创建一个 routes/backpack/permissionmanager.php 文件;包将看到它,并加载 您的 路由文件,而不是包中的路由文件;
  • 创建扩展包中控制器的控制器/模型,并在您的新路由文件中使用它们;
  • 修改任何您想要在新控制器/模型中修改的内容;

在创建自己的控制器、种子文件时,请确保使用 BackpackUser 模型,而不是您的应用中的 User 模型。最简单的方法是使用 config('backpack.base.user_model_fqn'),它将拉取完全限定名称空间中的 User 模型,如定义在您的 config/backpack/base.php 中。您可能需要使用 $model = config('backpack.base.user_model_fqn'); $model = new $model; 来实例化它,以便执行类似 $model->where(...) 的操作。

贡献

有关详细信息,请参阅 CONTRIBUTING

安全性

如果您发现任何安全相关的问题,请发送电子邮件至 tabacitu@backpackforlaravel.com,而不是使用问题跟踪器。

订阅 Backpack 通讯,以便您可以了解有关任何安全更新、重大更改或主要功能的最新信息。我们每 1-2 个月发送一封电子邮件。

致谢

许可协议

Backpack 对非商业用途免费,对商业用途为49欧元/项目。请参阅 许可文件backpackforlaravel.com 获取更多信息。

聘请我们

我们在 Laravel 上创建、完善和维护管理面板已经投入了超过 50,000 个小时。我们开发了电子商务、在线学习、ERP 系统、社交网络、支付网关等等。我们对管理面板的工作量如此之大,以至于我们创建了一个在其领域中最受欢迎的软件——仅仅是通过公开我们在项目中重复的内容。

如果您正在寻找一个开发者/团队来帮助您在 Laravel 上构建管理面板,请无需再寻找。您将很难找到比这更有经验且热情的人。这就是我们 所做的事情联系我们。让我们看看是否可以合作。