afzalsabbir / permissionmanager
使用 Backpack CRUD 为 Laravel 5 提供的用户和权限管理界面。
Requires
- afzalsabbir/crud: ^4.0|^5.0
- spatie/laravel-permission: ^5.0|^4.0|^3.0
Requires (Dev)
- phpunit/phpunit: ^9.0||^7.0
- scrutinizer/ocular: ~1.1
This package is auto-updated.
Last update: 2024-09-10 07:45:22 UTC
README
spatie/laravel-permission 的管理界面。它允许管理员轻松地添加/编辑/删除用户、角色和权限,使用 Laravel Backpack。
与某些其他包相反
- 用户可以拥有多个角色;
- 用户可以拥有额外的权限,除了他们拥有的角色上的权限之外;
此包只是 spatie/laravel-permission 的用户界面。它将安装它,并允许您在代码中使用其 API。请参阅他们的 README 以获取有关如何在代码中使用更多信息。
安全更新和重大更改
请 订阅 Backpack Newsletter,以便您可以了解有关任何安全更新、重大更改或主要功能的任何信息。我们每 1-2 个月发送一封电子邮件。
安装
-
此包假定您已经安装了 Backpack for Laravel。如果您还没有,请 先安装 Backpack。
-
在您的终端中
composer require afzalsabbir/permissionmanager
- 完成 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)
- 发布
backpack\permissionmanager
配置文件和迁移
php artisan vendor:publish --provider="Backpack\PermissionManager\PermissionManagerServiceProvider" --tag="config" --tag="migrations"
注意: 我们建议您只发布配置文件和迁移,但您也可以发布 lang 和 routes。
- 运行迁移
php artisan migrate
- 该包假定可以使用默认的 Backpack 用户模型(最可能是
App\Models\User
来管理用户。如果您想使用不同的模型,请在config/backpack/permissionmanager.php
文件中更改用户模型。您所使用的任何模型,请确保它使用CrudTrait
和HasRoles
特性
<?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 */
- (可选)在
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php
或menu.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>
- (可选)如果您想在 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'))
,它做的是完全相同的事情,但始终有效; - 当您添加新角色和权限时,数据库中保存的守卫将是 "backpack";
- [可选] 在您定义角色或权限后,通过在 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 类注册。因此,您可以使用 Laravel 的默认 can 函数测试用户是否具有权限。
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 对象或 \Illuminate\Support\Collection 对象。
可以将权限授予角色。
$role->givePermissionTo('edit articles');
您可以确定角色是否具有特定权限。
$role->hasPermissionTo('edit articles');
可以从角色中撤销权限。
$role->revokePermissionTo('edit articles');
givePermissionTo 和 revokePermissionTo 函数可以接受字符串或 Permission 对象。
保存的权限和角色也注册在 Illuminate\Auth\Access\Gate 类中。
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 安装,请注意,User 模型可能已从 App\User::class
移动到 App\Models\User::class
,检查您的配置是否与该更改兼容 config/backpack/permissionmanager.php
。
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
覆盖功能
如果您需要修改项目中此功能的工作方式
- 创建一个
routes/backpack/permissionmanager.php
文件;该包将看到它,并加载 您的 路由文件,而不是包中的路由文件; - 创建扩展包中控制器/模型的控制器/模型,并在您的新路由文件中使用它们;
- 修改您想要的任何新控制器/模型;
在创建自己的控制器、seeders 时,请确保使用 BackpackUser
模型,而不是应用程序中的 User
模型。最简单的方法是使用 config('backpack.base.user_model_fqn')
,它将拉入用户模型完全限定名称,如定义在您的 config/backpack/base.php
中。您可能需要使用 $model = config('backpack.base.user_model_fqn'); $model = new $model;
来实例化它,以便进行类似 $model->where(...)
的操作。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件tabacitu@backpackforlaravel.com联系,而不是使用问题跟踪器。
请 订阅 Backpack Newsletter,以便您可以了解有关任何安全更新、重大更改或主要功能的任何信息。我们每 1-2 个月发送一封电子邮件。
鸣谢
- Marius Constantin - 首席开发者
- Cristian Tabacitu - 维护者
- 所有贡献者
许可
Backpack 可免费用于非商业用途,商业用途为49欧元/项目。请参阅许可文件和backpackforlaravel.com以获取更多信息。
聘请我们
我们在 Laravel 上创建、完善和维护管理面板上花费了超过 50,000 个小时。我们开发了电子商务、电子学习、ERP、社交网络、支付网关等等。我们在管理面板上投入了如此多的努力,以至于我们创造了一个在其领域中最受欢迎的软件——仅从使我们的项目中的重复内容公开开始。
如果您正在寻找开发者/团队以帮助您在 Laravel 上构建管理面板,那么无需再寻找。您很难找到比这更有经验且热情的人。这就是我们所做的事情。 联系我们。让我们看看我们是否可以一起工作。