PHP code example of zine-admin / permission

1. Go to this page and download the library: Download zine-admin/permission library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

zine-admin / permission example snippets


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

//禁止
$role->givePermissionToDeny([
    'update:dashboard/users',
    '*: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


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'));
    }

// 分配角色给用户
$user->assignRole('writer');

//角色授予权限
$role->givePermissionToAllowed('edit:dashboard/articles');
//角色禁止权限
$role->givePermissionToDeny('edit:dashboard/articles');
//角色撤销权限
$role->removePermission('edit:dashboard/articles');

$user->can('*:dashboard/users')


namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable; 
use ZineAdmin\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use Notifiable; 
    use HasRoles;

	.
	.
	.
	
    /** 
     * 确定用户是否具有超级管理员身份 
     * 
     * @return bool
     */ 
    public function hasSuperAdmin()
    {
        return $this->id === 1;
    }
}


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

class User extends Authenticatable
{
    use HasRoles;

    // ...
}

use ZineAdmin\Permission\Models\Role;
// Create a superadmin role for the admin user
$role = Role::create(['name'=>'superadmin', 'desc'=>'superadmin']);


php artisan permission:create-role role-name role-desc

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' => '更新用户',
        ];
    }

use ZineAdmin\Permission\PermissionManage;
$permissionManage = app(PermissionManage::class);

//获得所有权限资源
$resource = $permissionManage->getResource()

//将tree结构的权限资源转换成一维数组,方便前台以表格显示
$resource = $permissionManage->getFlattenResource()

//检查是否存在指定的资源
$permissionManage->checkPermissionExists('add:dashboard/users')

//Collection
[[
    "id" => 1,
    "parent" => 0,
    "is_leaf" => 0,
    "res_id" => "*:dashboard",
    "name" => "dashboard",
    "level" => 1
  ],
...
]   

use ZineAdmin\Permission\Models\Role;
$role = Role::first();

///角色允许权限
$role->givePermissionToAllowed(...$permission)

//角色禁止权限
$role->givePermissionToDeny(...$permission)

//删除角色上面的权限
$role->removePermissionTo(...$permission)

$user->assignRoles('writer');

// You can also assign multiple roles at once
$user->assignRoles('writer', 'admin');
// or as an assignRoles
$user->assignRole(['writer', 'admin']);

$user->syncRoles(['writer', 'admin']);
$user->syncRoles('writer', 'admin');

$user->removeRoles('writer');
$user->removeRoles(['writer', 'admin']);
$user->removeRoles('writer', 'admin');

$user->hasRole('admin')

$user->hasAnyRoles('admin')
$user->hasAnyRoles(['writer','admin'])
$user->hasAnyRoles(Role::all());

$user->hasAllRoles(['writer','admin'])
$user->hasAllRoles(Role::all());

$user->hasAnyPermissions('view:dashboard/users')
$user->hasAnyPermissions(['view:dashboard/users', 'update:dashboard/users'])

$user->hasAllPermissions(['view:dashboard/users', 'update:dashboard/users'])

@role('writer')
    I am a writer!
@else
    I am not a writer...
@endrole

@hasanyroles('writer')
    I am a writer!
@else
    I am not a writer...
@endhasanyroles

@hasanyrole('writer|admin')
    I am either a writer or an admin or both!
@else
    I have none of these roles...
@endhasanyrole

@hasallroles('writer|admin')
    I am both a writer and an admin!
@else
    I do not have all of these roles...
@endhasallroles

@can('edit:dashboard/articles')
  //
@endcan

@if(auth()->user()->can('edit:dashboard/articles') && $some_other_condition)
  //
@endif

protected $routeMiddleware = [
    // ...
    'role' => \ZineAdmin\Permission\Middleware\RoleMiddleware::class,
    'permission' => \ZineAdmin\Permission\Middleware\PermissionMiddleware::class,
];

Route::group(['middleware' => ['role:super-admin']], function () {
    //
});

Route::group(['middleware' => ['permission:*:dashboard/users create:dashboard/roles']], function () {
    //
});

Route::group(['middleware' => ['role:super-admin','permission:*:dashboard/users create:dashboard/roles']], function () {
    //
});

Route::group(['middleware' => ['role:super-admin|writer']], function () {
    //
});

Route::group(['middleware' => ['permission:publish articles|edit:dashboard/articles']], function () {
    //
});

public function __construct()
{
    $this->middleware(['role:super-admin','permission:publish articles|edit:dashboard/articles']);
}

use ZineAdmin\Permission\Traits\HasPermissionsForController;

class HomeController extends Controller
{
    use HasPermissionsForController;

    /**
     * @role admin
     * @permission view:dashboard/roles create:dashboard/roles
     */
    public function view()
    {
        // Code here ...
    }
}

public function render($request, Exception $exception)
{
    if ($exception instanceof \Spatie\Permission\Exceptions\UnauthorizedException) {
        // Code here ...
    }

    return parent::render($request, $exception);
}


$user->assignRoles('writer');
$user->removeRoles('writer');
$user->syncRoles(params);
$role->givePermissionToAllowed('edit:dashboard/articles');
$role->givePermissionToDeny('edit:dashboard/articles');
$role->removePermission('edit:dashboard/articles');

use ZineAdmin\Permission\PermissionManage;
app(PermissionManage::class)->forgetCachedPermissions()

// #1
$node->prependToNode($parent)->save();

// #2
$parent->prependNode($node);

// 访问祖先
$node->ancestors;

// 访问后代
$node->descendants;

//查找祖先
$result = Role::ancestorsOf($id);
//查找祖先和自己(包含节点深度)
$result = Role::withDepth()->ancestorsAndSelf($id);
$result = Role::descendantsOf($id);
$result = Role::descendantsAndSelf($id);

$tree = Role::get()->toTree();

$nodes = Role::withDepth()->get()->toFlatTree();

$root = Role::descendantsAndSelf($rootId)->toTree()->first();
$root = Role::withDepth()->descendantsOf($rootId)->toTree()->first();

$role->delete();

Role::where('id', '=', $id)->delete();

$bool = Role::isBroken(); //true or false
//错误统计信息
$data = Role::countErrors();

Role::fixTree();
bash
> php artisan vendor:publish --provider="ZineAdmin\Permission\PermissionServiceProvider" 
bash
> php artisan migrate

bash
> composer dump-autoload