nextgen-tech / laravel-abilities
Requires
- php: ^5.6|^7.0
- illuminate/auth: ^5.4|^6.0|^7.0|^8.0
- illuminate/routing: ^5.4|^6.0|^7.0|^8.0
- illuminate/support: ^5.4|^6.0|^7.0|^8.0
- illuminate/translation: ^5.4|^6.0|^7.0|^8.0
Requires (Dev)
- phpstan/phpstan: ^0.12.50
This package is auto-updated.
Last update: 2024-09-22 16:46:22 UTC
README
目录
安装
composer
在终端中输入
composer require nextgen-tech/laravel-abilities:^1.0
服务提供者
如果应用程序使用Laravel 5.5或更高版本,则可以省略此步骤。
在文件config/app.php
中,将提供者列表中添加
'providers' => [ ... NGT\Laravel\Abilities\AbilityServiceProvider::class ]
中间件
在文件app/Http/Kernel.php
中,在web
组中添加
protected $middlewareGroups = [ 'web' => [ ... \NGT\Laravel\Abilities\Middleware\CheckUserAbilities::class ] ]
复制文件
要复制包中的必需文件,请执行以下命令
php artisan vendor:publish --provider="NGT\\Laravel\\Abilities\\AbilityServiceProvider"
也可以通过提供以下标签之一来发布部分文件:config
、translations
、models
或migrations
php artisan vendor:publish --provider="NGT\\Laravel\\Abilities\\AbilityServiceProvider" --tag=config
迁移
运行迁移
php artisan migrate
配置
包的配置位于文件config/abilities.php
中。
return [ 'path' => base_path('routes/abilities.php'), // Ścieżka do definicji uprawnień 'models' => [ 'user' => App\User::class, // Model użytkowników 'user_ability' => App\UserAbility::class, // Model uprawnień użytkowników 'user_group' => App\UserGroup::class, // Model grup użytkowników 'user_group_ability' => App\UserGroupAbility::class, // Model uprawnień grup użytkowników ], ];
权限定义
默认权限位于文件routes/abilities.php
中。可以在配置中更改此路径。
使用NGT\Laravel\Abilities\Facades\Ability
门面或NGT\Laravel\Abilities\AbilityRegistrar
类实例来定义权限。
权限组
Ability::group(array $attributes, callable $abilities)
使用group
方法定义组。组可以包含显示名称(label
)和前缀(prefix
),但这些选项不是必需的。组还可以包含其他组。组的数据通过匿名函数传递给子元素。
Ability::group(['label' => 'Panel administracyjny', 'prefix' => 'admin'], function() { ... })
单个权限
Ability::define(string $slug, string $label, array $options = [])
每个权限都有自己的简短名称($slug
)和显示名称($label
)。此外,可以定义选项($options
)。
别名
每个权限都可以有别名。最好的例子是create-store
和edit-update
操作。要将它们作为单个权限管理,可以按以下方式定义
Ability::define('create', 'Tworzenie', [ 'aliases' => ['store'], ]);
自定义函数
如果权限不使用默认验证方法,可以将函数传递给它。该函数将代替默认方法执行。
Ability::define('index', 'Wyświetlanie', [ 'callback' => function($user, $ability) { return $user->is_activated; } ])
权限资源
Ability::resource(string $prefix, string $label, array $options = [])
与路由一样,在权限中也可以定义资源。在创建资源时,需要提供组前缀($prefix
)和显示名称($label
)。
Ability::resource('user', 'Użytkownicy');
此外,可以传递排除或仅允许选择权限的选项。
Ability::resource('user', 'Użytkownicy', [ 'only' => ['index', 'create', 'edit'], ]); Ability::resource('user', 'Użytkownicy', [ 'except' => ['show', 'destroy'], ]);
检查权限
可以使用标准Gate
类方法检查每个权限。
Gate::allows('admin.user.index'); @can('admin.user.index'); Route::get('/', 'UserController@index')->middleware('can:admin.user.index');
为了使控制器自动检查数据操作的权限,可以在其中定义操作与权限之间的关联列表
class UserController extends Controller { ... public $actionAbilities = [ 'index' => 'admin.user.index', 'create' => 'admin.user.create', ]; ... }