ACL 访问控制包

v2.0.4 2023-01-23 12:24 UTC

This package is auto-updated.

Last update: 2024-09-06 11:40:49 UTC


README

此包包含一个访问控制(访问控制列表)层,允许定义用户、角色、权限和组。它内部使用 Laratrust 包。

还包含此 ACL 层的 administration backend。此 backend 依赖于 ajtarragona/web-components 包以正确运行。

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

安装

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 文件中(如果想要使用组)

  1. teams.enabled 属性设置为 true
 ...
 'teams' => [
    'enabled' => true,
 ]
 ...
  1. 定义模型
'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',

],
  1. 最后,执行以下命令
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