sonphvl/authorization

一个通过 Gate 实现基于角色和权限授权的包

v1.1.1 2024-01-27 09:34 UTC

This package is auto-updated.

Last update: 2024-09-27 12:06:51 UTC


README

此包提供了一个基于 Laravel Gate 的简单授权实现。

实现

1. 安装包

此命令将安装包

composer require sonphvl/authorization

此包需要发布迁移,如果迁移没有自动发布,请运行以下命令

php artisan vendor:publish --tag=authorization-migrations
php artisan migrate

2. 发布资源(可选)

如果您想发布资源进行编辑,请运行以下命令

php artisan vendor:publish --tag=authorization-middleware
php artisan vendor:publish --tag=authorization-config

3. 注册服务提供者

打开 config/app.php 并将您的服务提供者添加到 providers 数组中。

'providers' => [
    // Other Package Service Providers...
    Sonphvl\Authorization\AuthorizationServiceProvider::class,

    //Application Service Providers
],

4. 应用 Authorizable 特性

将 Authorizable 特性添加到您的 Authenticatable 模型中,例如 User 模型

namespace App\Models;

// Others imported classes
use Sonphvl\Authorization\Traits\Authorizable; //Add this line

class User extends Authenticatable
{
    use Authorizable; //Add this line

    //Your model content
}

5. 管理角色和权限

您可以在 "/authorization" 处映射角色和权限

route('authorization.index')

6. 应用

安装包后,将自动注册名为 "authorize" 的中间件别名。

关于 Authorize 中间件

当您应用中间件时,默认的权限名称是路由前缀、控制器名称前缀和操作名称的小写拼接。例如,考虑以下路由

Route::prefix('admin')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
});

在上面的示例路由中,包将调用以下

$controller->authorize('admin-user-index');

要自定义控制器名称前缀,在您的控制器中添加此行

public $authorizePrefix = 'alternative';

通过这种方式,包将调用以下

$controller->authorize('admin-alternative-index');

应用于中间件组

要将 "authorize" 中间件应用于中间件组,请将以下内容添加到您的 .env 文件中

AUTHORIZATION_MIDDLEWARE_GROUPS=web,api

当注册中间件组时,将以下内容添加到您的控制器中以忽略任何函数

public $ignoredAutoAuthorize = ['index']; //To ignore index function from authorization

应用于路由

对单个路由应用

Route::get('/users', [UserController::class, 'index'])->middleware(['authorize']);

对多个路由应用

Route::middleware(['authorize'])->group(function () {
    Route::get('/', function () {
        // Uses first & second middleware...
    });

    Route::get('/user/profile', function () {
        // Uses first & second middleware...
    });
});

手动应用于特定函数

要授权一个函数,在您的控制器函数顶部添加此行

class UserController extends Controller
{
    public function index()
    {
        $this->authorize('permission-name'); //Add this line

        //The rest of the function
    }
}

许可协议

此包是开源软件,根据 MIT 许可协议 许可。