PHPackages                             zine-admin/permission - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. zine-admin/permission

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

zine-admin/permission
=====================

Permission handling for Laravel 5.5 and up

v2.2.14(8y ago)117MITPHPPHP &gt;=7.0

Since Dec 4Pushed 8y ago1 watchersCompare

[ Source](https://github.com/hezhiying/laravel-permission)[ Packagist](https://packagist.org/packages/zine-admin/permission)[ RSS](/packages/zine-admin-permission/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (6)Dependencies (2)Versions (7)Used By (0)

用户角色权限包
=======

[](#用户角色权限包)

- [Installation](#installation)
- [Usage](#usage)
    - [创建角色](#%E5%88%9B%E5%BB%BA%E8%A7%92%E8%89%B2)
    - [注册权限](#%E6%B3%A8%E5%86%8C%E6%9D%83%E9%99%90)
    - [为角色授予权限或禁止权限](#%E4%B8%BA%E8%A7%92%E8%89%B2%E6%8E%88%E4%BA%88%E6%9D%83%E9%99%90%E6%88%96%E7%A6%81%E6%AD%A2%E6%9D%83%E9%99%90)
    - [用户分配角色](#%E7%94%A8%E6%88%B7%E5%88%86%E9%85%8D%E8%A7%92%E8%89%B2)
- [角色和权限检查](#%E8%A7%92%E8%89%B2%E5%92%8C%E6%9D%83%E9%99%90%E6%A3%80%E6%9F%A5)
    - [检查角色](#%E6%A3%80%E6%9F%A5%E8%A7%92%E8%89%B2)
    - [检查权限](#%E6%A3%80%E6%9F%A5%E6%9D%83%E9%99%90)
    - [Blade指令](#blade%E6%8C%87%E4%BB%A4)
    - [Middleware](#middleware)
    - [Controller 注释](#controller)
- [捕获角色和权限检查错误异常](#%E6%8D%95%E8%8E%B7%E8%A7%92%E8%89%B2%E5%92%8C%E6%9D%83%E9%99%90%E6%A3%80%E6%9F%A5%E9%94%99%E8%AF%AF%E5%BC%82%E5%B8%B8)
- [cache](#cache)
- [角色表生成树](#role-tree)

写在前面

> 验证方式：本包的权限验证思路有别于其它权限包，权限格式以 `操作:资源父级/资源下级` 操作资源格式，下级权限默认是继承上线资源的权限，例如：

```
$role = Role::whereName('editor')->first();
//授予
$role->givePermissionToAllowed([
    '*:dashboard',
    'view:dashboard/roles'
])

//禁止
$role->givePermissionToDeny([
    'update:dashboard/users',
    '*:dashboard/roles'
])
```

上面的意思表示角色 `editor` 拥有`dashboard`资源下的的所有权限，但是不能更新用户操作`update:dashboard/users` 和 对角色资源的操作`*:dashboard/roles` 但是可以拥有查看角色的权限`view:dashboard/roles`, 如以下代码：

```
$user = User::first();
//对用户分配角色
$user->assignRole('editor');

$user->hasPermission('*:dashboard'); //true
$user->hasPermission('view:dashboard/users'); //true
$user->hasPermission('update:dashboard/users'); //false
$user->hasPermission('*:dashboard/logs'); //true
$user->hasPermission('*:dashboard/roles'); //false
$user->hasPermission('create:dashboard/roles'); //false
$user->hasPermission('update:dashboard/roles'); //false
$user->hasPermission('view:dashboard/roles'); //true
```

> 管理添加系统中的所有权限资源 本包没有提供`permissions`表以存储所有可分配的权限表，而是以注册的形式，假如我们开发一个会员模块，可以在某个`ServiceProvider`中注册，如：

```
use Illuminate\Support\ServiceProvider;
use ZineAdmin\Permission\PermissionManage;
class AppServiceProvider extends ServiceProvider
{
    public function boot(PermissionManage $permissionManage)
    {
        $permissionManage->registerPermissions($this->registerPermissionsMain());
    }

    protected function registerPermissionsMain(): array
    {
        return [
            'dashboard/users' => '用户管理',
            'create:dashboard/users' => '创建用户',
            'view:dashboard/users' => '显示用户',
            'delete:dashboard/users' => '删除用户',
            'update:dashboard/users' => '更新用户',
        ];
    }
    //code...
```

权限注册后，可以通过以下方式把系统中所有地方注册过的资源显示出来，然后可以授权给某个角色或用户。 通过这种方法，你可以很方便的为用户角色进行授权。

```
use ZineAdmin\Permission\PermissionManage;

class HomeController
{
    public function index()
    {
        $permissionManage = app(PermissionManage::class);
        $resources = $permissionManage->getFlattenResource();
        return view('perm', compact('resources'));
    }
```

perm view:

```
//每个资源有如下属性 res_id  parent name level

    @foreach($resources as $re)

            {{str_repeat('&nbsp;&nbsp;',$re['level'])}} {{$re['res_id']}} ({{$re['name']}})

                 继承
