napp / aclcore
项目 ACL 核心
2.0.0
2020-10-29 20:17 UTC
Requires
- php: ^7.2|^8.0
- ext-json: *
- illuminate/auth: ^5.8|^6.0|^7.0|^8.0
- illuminate/database: ^5.8|^6.0|^7.0|^8.0
- illuminate/support: ^5.8|^6.0|^7.0|^8.0
- illuminate/view: ^5.8|^6.0|^7.0|^8.0
- napp/apicore: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^5.0|^6.3
- phpunit/phpcov: ^6.0|^7.0|^8.0
- squizlabs/php_codesniffer: ^3.5
README
为 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 测试以获取更多示例和用法。