ajtarragona / acl
ACL 访问控制包
v2.0.4
2023-01-23 12:24 UTC
Requires
- php: >=7.0.0
- adldap2/adldap2-laravel: ^6.0
- genealabs/laravel-model-caching: ^0.7.0
- kyslik/column-sortable: ^6.0
- laravel/framework: ^6.0
- laravel/passport: ^9.3.2
- santigarcor/laratrust: ^6.0
README
此包包含一个访问控制(访问控制列表)层,允许定义用户、角色、权限和组。它内部使用 Laratrust 包。
还包含此 ACL 层的 administration backend。此 backend 依赖于 ajtarragona/web-components 包以正确运行。
安装
composer require ajtarragona/acl
如果还想使用 backend,则需要要求 web-components 包。
composer require ajtarragona/web-components
初始配置
在 config/auth.php
文件中定义 package 类到 user provider
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => Ajtarragona\ACL\Models\User::class, ], ]
如果使用 LDAP,也需要在 config/ldap_auth.php
文件中更改模型
'model' => Ajtarragona\ACL\Models\User::class,
如果找不到该文件,需要使用以下命令发布
php artisan vendor:publish --provider=Adldap\Laravel\AdldapAuthServiceProvider
发布 Laratrust 的配置。
php artisan vendor:publish --tag="laratrust"
在 config/laratrust.php
文件中(如果想要使用组)
- 将
teams.enabled
属性设置为true
... 'teams' => [ 'enabled' => true, ] ...
- 定义模型
'user_models' => [ 'users' => 'Ajtarragona\ACL\Models\User', ], ... 'models' => [ /** * Role model */ 'role' => 'Ajtarragona\ACL\Models\Role', /** * Permission model */ 'permission' => 'Ajtarragona\ACL\Models\Permission', /** * Team model */ 'team' => 'Ajtarragona\ACL\Models\Team', ],
- 最后,执行以下命令
php artisan ajtarragona:acl-setup
这将为数据库表做准备,如果不存在,将执行迁移并创建默认的权限、角色和用户。
可以在
config/acl_seed.php
文件中修改默认的角色、权限和用户,发布 package 配置之前
php artisan vendor:publish --tag=ajtarragona-acl
将创建一个名为 acl
的用户,密码为 acl
,拥有所需的角色和权限。
Backend
可以通过 ajtarragona/acl
路径访问 administration backend。需要输入有效的用户并拥有授权管理权限。
可以通过在 .env
文件中配置 ACL_BACKEND
变量来禁用 backend。
使用
查看 Laratrust 文档以获取更多信息。
大致上,为了检查用户是否有特定的角色或权限,我们可以在路由中通过中间件来实现
Route::group(['middleware' => ['role:admin']], function() { ... });
Route::group(['middleware' => ['permission:edit-post']], function() { ... });
或者通过 blade 指令在视图中实现
@role('admin') <p>This is visible to users with the admin role. Gets translated to \Laratrust::hasRole('admin')</p> @endrole
@permission('manage-admins') <p>This is visible to users with the given permissions. Gets translated to \Laratrust::can('manage-admins'). The @can directive is already taken by core laravel authorization package, hence the @permission directive instead.</p> @endpermission