pollob666 / acl
为 Laravel 应用程序提供的动态配置访问控制管理
Requires
- php: >=7.2.0
- laravel/framework: >=6.0.0
This package is auto-updated.
Last update: 2024-09-23 09:49:32 UTC
README
Laravel 应用程序的动态配置访问控制...
安装
composer require Pollob666/acl
配置
在你的 Laravel 配置文件 app.php 中的 providers 下添加
Pollob666\Acl\AclServiceProvider::class
发布
php artisan vendor:publish
此命令将在 views/vendor/acl 内发布视图文件,在 databases/seed 内发布种子文件,以及一个配置文件 config/acl.php。
种子
在你的 DatabaseSeeder.php 文件下的 database/seeds 中添加以下行
$this->call(UserTableSeeder::class); //optional $this->call(RoleTableSeeder::class); $this->call(ResourceTableSeeder::class); $this->call(PermissionTableSeeder::class); $this->call(UserRoleTableSeeder::class);
注意:如果你看到任何类型的找不到类的类型错误,请尝试运行 composer dump-autoload
artisan
此库包含一个 artisan 命令 acl:resource,可以自动创建在 app/Http/Controllers 目录下可用的所有资源(控制器@操作)。要激活此命令,你需要在 app/Console/Kernel.php 文件中添加以下行。
protected $commands = [ \Pollob666\Acl\Commands\AclResource::class ];
@annotation
Acl 库现在支持两种注解 @resource 和 @allowRole,可以用于控制器操作
/** * @resource('able to see home') * @allowRole('Default, Admin') */ public function index() { return view('home'); }
注意:默认情况下,开发者 角色具有最高权限级别,并且不需要在 @allowRole 注解中提及。如果你删除了 @allowRole 注解,它不会从数据库中删除权限,但如果你更改注解中的角色列表,则会相应地更新数据库。
中间件
此 ACL 库包含两个中间件,如下所示。 AuthenticateWithAcl 是你需要的中件。另一个 ResourceMaker 中件仅用于在资源最初不存在时动态创建资源并为 developer 角色分配权限。
在你的 kernal.php 文件中添加以下行
'auth.acl' => \Pollob666\Acl\Middleware\AuthenticateWithAcl::class, 'resource.maker' => \Pollob666\Acl\Middleware\ResourceMaker::class,
在你的 route/web.php 文件中添加以下行
Route::group(['middleware' => ['resource.maker','auth.acl']], function () { Route::get('/home', 'HomeController@index'); });
重要:必须将 resource.maker 放在 auth.acl 之前。在生产中,一旦生成了所有资源,你可以删除 resource.maker。
角色 & 资源 UI
要访问角色,请访问 YOUR-HOST/role URL
要访问资源 UI,请访问 YOUR-HOST/resource URL
辅助函数
has_access 检查角色是否有权访问特定的控制器操作。
@if(has_access('User\UserController@getIndex')) OR @if(has_access('UserController@getIndex'))
has_group_access 检查角色是否有权访问特定的控制器
@if(has_group_access(['User-User','User-Role','User-Resource'])) OR @if(has_group_access('User-User'))
@nullsafe() 检查在流畅接口($obj->prop->value)中任何对象属性是否为 null,如果链路中断,它将简单地返回一个空字符串并防止显示 调用非对象成员函数 异常。
Blade 示例
{{ @nullsafe($obj->prop->value) }}
致谢
感谢 Mahbubul Hasan Uzzal 的 "https://github.com/mahabubulhasan/acl" 包。此包仅是对他的代码库的改进,适用于 Laravel 6 应用程序,并添加了一些附加功能。