amdad121/guard-laravel

Guard 是 Laravel 的角色和权限管理系统

v0.3.0 2024-03-14 17:14 UTC

This package is auto-updated.

Last update: 2024-09-14 18:36:53 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Guard 是 Laravel 的角色和权限管理系统

安装

您可以通过 composer 安装此包

composer require amdad121/guard-laravel

您可以使用以下命令发布并运行迁移

php artisan vendor:publish --tag="guard-laravel-migrations"
php artisan migrate

在用户模型上添加 HasRoles 特性和 UserContract 接口

namespace App\Models;

use AmdadulHaq\Guard\Contracts\User as UserContract;
use AmdadulHaq\Guard\HasRoles;
# ...

class User extends Authenticatable implements UserContract
{
    use HasRoles;
}

用法

创建角色

use AmdadulHaq\Guard\Models\Role;

Role::create(['name' => 'administrator']);

创建权限

use AmdadulHaq\Guard\Models\Permission;
use AmdadulHaq\Guard\Models\Role;

$items = [
    'role' => ['viewAny', 'view', 'create', 'update', 'delete', 'restore', 'forceDelete'],
    'permission' => ['viewAny', 'view', 'create', 'update', 'delete'],
];

$role = Role::first();

foreach ($items as $group => $names) {
    foreach ($names as $name) {
        $permission = Permission::create(['name' => $group.'.'.$name]);

        $role->givePermissionTo($permission);
    }
}

分配角色和权限

use AmdadulHaq\Guard\Models\Permission;
use AmdadulHaq\Guard\Models\Role;
use App\Models\User;

$user = User::first();

$role = Role::first();

// Assign role
$user->assignRole($role);

$permission = Permission::first();

// Assign permission
$role->givePermissionTo($permission);

撤销角色和权限

use AmdadulHaq\Guard\Models\Permission;
use AmdadulHaq\Guard\Models\Role;
use App\Models\User;

$user = User::first();

$role = Role::first();

// Revoke role
$user->revokeRole($role);

$permission = Permission::first();

// Revoke permission
$role->revokePermissionTo($permission);

检查角色和权限

use AmdadulHaq\Guard\Models\Permission;
use AmdadulHaq\Guard\Models\Role;
use App\Models\User;

$user = User::first();

$role = Role::first();

// Role check
$user->hasRole($role->name) // true or false

$permission = Permission::first();

// Permission check
$user->hasPermission($permission); // true or false

您可以使用多种方式,以下是一些示例

use Illuminate\Support\Facades\Gate;

// for permission
Gate::authorize('role.show');

// for role
Gate::authorize('administrator');
// for permission
$this->authorize('role.show');

// for role
$this->authorize('administrator');
use Illuminate\Support\Facades\Route;

// for permission
Route::get('/', function () {
    // ...
})->middleware('can:role.show');

// for role
Route::get('/', function () {
    // ...
})->middleware('can:administrator');
// for permission
@can('role.show')
    It's works
@endcan

// for role
@can('administrator')
    It's works
@endcan

测试

composer test

更新日志

请参阅更新日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件