napp/aclcore

项目 ACL 核心

2.0.0 2020-10-29 20:17 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:42 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Software License codecov

为 Laravel 优化的性能角色和权限。每个权限都通过代码注册,而不是通过连接表。这导致了极好的性能。

安装

composer require napp/aclcore

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Napp\Core\Acl\AclServiceProvider" --tag="config"

发布后 - 请查看并根据您的应用程序进行相应更改。配置文件 config/acl.php 包含

return [
    /**
     * Define which Eloquent models used by the package
     */
    'models' => [
        'role' => Napp\Core\Acl\Model\Role::class,
        'user' => Illuminate\Foundation\Auth\User::class,
    ],

    /**
     * Table names for the package
     */
    'table_names' => [
        'roles' => 'roles',
        'users_roles' => 'users_roles',
    ],

    /**
     * The default guard used to authorize users
     */
    'guard' => 'web'
];

使用方法

HasRole 特性添加到您的用户模型中

use Illuminate\Foundation\Auth\User as Authenticatable;
use Napp\Core\Acl\Contract\Role as RoleContract;
use Napp\Core\Acl\Role\HasRole;

class User extends Authenticatable implements RoleContract
{
    use HasRole;
}

注册权限

在您的应用程序中注册简单权限。

Napp\Core\Acl\PermissionRegistrar::register([
    'users.create', 
    'users.view'
]);

使用闭包注册权限。

Napp\Core\Acl\PermissionRegistrar::register([
    'users.create' => 'My\App\Users\Permissions@create',
    'users.update' => 'My\App\Users\Permissions@edit',
    'users.view'
]);

注册中间件

将中间件添加到 App/Http/Kernal.php

protected $routeMiddleware = [
    'may' => \Napp\Core\Acl\Middleware\Authorize::class,

用法

Route::get('users', ['uses' => 'UsersController@index'])->middleware('may:users.view');

PHP 代码中的用法

// authorize a single permission
if (may('users.view')) {
    // do something
}

// authorize if **any** of the permissions are valid
if (may(['users.view', 'users.create'])) {
    // do something
}

// authorize if **all** of the permissions are valid
if (mayall(['users.view', 'users.create'])) {
    // do something
}

// reverse - not logic
if (maynot('users.view')) {
    return abort();
}

// check for user role
if (has_role($user, 'manager')) {
    // do something
}

// check if user has many roles
if (has_role($user, ['support', 'hr'])) {
    // do something
}

Blade 中的用法

may 与 Laravel 中的默认 can 相当。

@may('users.create')
    <a href="my-link">Create</a>
@endmay

检查用户是否有 任何 权限

@may(['users.create', 'users.update'])
    <a href="my-link">Create</a>
@endmay

检查用户是否有 所有 权限

@mayall(['users.create', 'users.update'])
    <a href="my-link">Create</a>
@endmayall

使用 maynot 进行反向逻辑

@maynot('users.create')
    <a href="my-link">Create</a>
@endmaynot

检查用户是否有特定角色

@hasrole('admin')
    <a href="my-link">Create</a>
@endhasrole

查看 PHPUnit 测试以获取更多示例和用法。