shitoudev/permissionmanager

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

2.1.19 2017-08-05 07:31 UTC

README

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

使用 Laravel Backpack 简单易用地添加/编辑/删除用户、角色和权限的行政界面。与其他一些包不同

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

Edit a user in Backpack/PermissionManager

安全更新和重大变更

订阅 Backpack Newsletter 以了解任何安全更新、重大变更或新功能。我们每 1-2 个月发送一封电子邮件。

安装

  1. 在终端
$ composer require backpack/permissionmanager
  1. 将服务提供者添加到您的 config/app.php 文件中
Backpack\PermissionManager\PermissionManagerServiceProvider::class,
  1. 发布配置文件并运行迁移
$ php artisan vendor:publish --provider="Backpack\PermissionManager\PermissionManagerServiceProvider" #publish config files and migrations
$ php artisan migrate #create the role and permission tables
  1. 在您的 User 模型上使用以下 trait
<?php namespace App;

use Backpack\CRUD\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.blade.php 或 menu.blade.php 中添加一个菜单项
<!-- Users, Roles Permissions -->
  <li class="treeview">
    <a href="#"><i class="fa fa-group"></i> <span>Users, Roles, Permissions</span> <i class="fa fa-angle-left pull-right"></i></a>
    <ul class="treeview-menu">
      <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/user') }}"><i class="fa fa-user"></i> <span>Users</span></a></li>
      <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/role') }}"><i class="fa fa-group"></i> <span>Roles</span></a></li>
      <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/permission') }}"><i class="fa fa-key"></i> <span>Permissions</span></a></li>
    </ul>
  </li>
  1. [可选] 使用 config/backpack/permissionmanager.php 中的配置文件禁止创建/更新您的角色或权限。请注意,代码中使用名称引用权限和角色。如果您允许管理员编辑这些字符串,并且他们真的这样做了,您的权限和角色检查将停止工作。

API 使用

由于该包需要 spatie/laravel-permission,因此 API 将是相同的

使用权限

可以将权限授予用户

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

可以从用户中撤销权限

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

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

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

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

$user->can('edit articles');

使用角色和权限

可以将角色分配给用户

$user->assignRole('writer');

可以从用户中移除角色

$user->removeRole('writer');

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

$user->hasRole('writer');

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

$user->hasAnyRole(Role::all());

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

$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-class。

$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 指令来检查用户是否具有特定的权限。

变更日志

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

屏幕截图

Roles table view in Backpack/PermissionManager

测试

// TODO

覆盖功能

如果您需要修改项目中的此功能

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

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

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

订阅 Backpack Newsletter 以了解任何安全更新、重大变更或新功能。我们每 1-2 个月发送一封电子邮件。

鸣谢

许可证

Backpack 免费供非商业用途,商业用途为每项目 $19。请参阅 许可证文件backpackforlaravel.com 以获取更多信息。