epsjv / acl
基本权限包。
1.1.4
2020-06-17 16:09 UTC
This package is not auto-updated.
Last update: 2024-09-19 21:44:29 UTC
README
描述
laravel-acl 是一个创建用户角色基础访问控制规则的包,允许控制多角色用户的访问。
要求
安装
- 执行以下命令
composer require epsjv/acl
- 基于一个干净安装,打开文件
config/app.php
,导航到providers
部分,并在末尾添加以下内容
EPSJV\Acl\Providers\ServiceProvider::class,
- 发布
php artisan vendor:publish --provider="EPSJV\Acl\Providers\ServiceProvider"
- 在 database/seeds/DatabaseSeeder.php 中注册基本权限的种子
public function run() { // $this->call(UsersTableSeeder::class); $this->call(AclPapelTableSeeder::class); $this->call(AclPermissaoTableSeeder::class); $this->call(AclPapelUserTableSeeder::class); $this->call(AclPapelPermissaoTableSeeder::class); }
- 执行以下命令以运行种子
php artisan migrate --seed
- 打开应用中的 App\Providers\AuthServiceProvider.php 文件,按以下配置进行设置
namespace App\Providers; use EPSJV\Acl\Traits\MakeAuthorizations; // Importar a Trait MakeAuthorizations do pacote use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { use MakeAuthorizations; /** * The policy mappings for the application. * * @var array */ protected $policies = [ User::class => 'EPSJV\Acl\Policies\UserPolicy', // Registrar a policy ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->makeAuthorizations(); // Invocar o método makeAuthorizations } }
- 在 User (User.php) 模型中包含 Traits "HasPapeis" 和 "WithPapeis",如下所示
use EPSJV\Acl\Traits\HasPapeis; use EPSJV\Acl\Traits\WithPapeis; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable, HasPapeis, WithPapeis; }
该包提供了一套简单易用的数据结构来处理权限和用户角色。
如何使用
使用方式与任何其他预存规则相同,因为访问控制只需要使用 Laravel 提供的 GATES 和 POLICIES 方法。
您可以通过以下方式设计路由
路由保护
/** * Verifica se a permission encontrada está contida na lista de permissions associada ao papel do usuário * * @param Permissao $permissao * @return true * * @example rota - Para usar na rota, basta chamar uma middleware, passando a chave 'can' e o nome da permission que deseja autorizar * * Route::get('edit/{curso}', 'CursoController@edit')->name('curso.edit')->middleware('can:editar_curso'); * */
控制器保护
/** * Verifica se a permission encontrada está contida na lista de permissions associada ao papel do usuário * * @param Permissao $permissao * @return true * * @example controller - Para usar no controller, basta chamar o método authorize no início de cada action, passando o nome da permission e o $model * * public function edit(Curso $curso) * { * $this->authorize('editar_curso', $curso); * } */
视图保护
/** * Verifica se a permission encontrada está contida na lista de permissions associada ao papel do usuário * * @param Permissao $permissao * @return true * * @example view - Para usar na view blade, é necessário envolver o trecho de código que deseja autorizar * com o nome da permission usando a facade @can ou @cannot * * @can('editar_curso', $cursos) * {{-- código aqui --}} * @endcan */
如果我想加载一个具有角色的会话呢?
该包的实现是为了一个场景,其中加载了所有与用户关联的角色和权限。但您可以实现自己的逻辑来按访问加载一个角色。
以下是一个实现示例
-
在您的应用 "app" 目录下创建一个名为 "Traits" 的文件夹。
-
在该新文件夹中创建一个名为 MakeAuthorizations.php 的 Trait,内容如下
<?php namespace App\Traits; use App\User; use EPSJV\Acl\Permissao; use Illuminate\Support\Facades\Gate; trait MakeAuthorizations { public function makeAuthorizations() { $permissoes = Permissao::with('papeis')->get(); foreach ($permissoes as $permissao) { Gate::define($permissao->nome, function(User $user) use ($permissao) { return $permissao->papeis->pluck('id')->contains(session('session_papel_id')); }); } } }
- 在您的应用的 AuhServiceProvider 中,更改 Trait 的导入,改为使用自己创建的 Trait 而不是包中的 Trait
- 在 App\Providers\AuthServiceProvider.php 中替换以下内容
use EPSJV\Acl\Traits\MakeAuthorizations;
- 为
use App\Traits\MakeAuthorizations;
查看有关 AUTHORIZATIONS 的所有信息。
有关 Laravel 的更多信息,请参阅 Laravel 官方文档 6.x 版。
许可证
MIT