Laravel用户权限解决方案 Entrust
Zizaco/Entrust 是 Laravel 下的用户权限解决方案,在配合 Zizaco/Confide 身份认证 扩展包,可以快速搭建具备高扩展的用户系统。
用户身份认证 Authentication 用于处理用户登录,退出,注册,找回密码,重置密码,用户邮箱认证等
用户权限管理 Authorization 负责用户与权限以及用户组三者之间的对应以及管理功能。
将用户身份认证和用户权限管理分开可以更加灵活的处理一些特殊的业务逻辑。
安装
1. composer.json
"zizaco/entrust": "dev-laravel-5"
2.安装
composer update
3.provider
更新 app/config/app.php 文件,再peoviders 数组内添加:
'Zizaco\Entrust\EntrustServiceProvider'
4.aliase
更新app/config/app.php 文件,再aliases 数组内添加:
'Entrust' => 'Zizaco\Entrust\EntrustFacade'
5.更新系统配置
创建 app/config/entrust.php 文件,执行
php artisan vendor:publish
6.根据需要修改 entrust.php 文件内容的 ‘role’ 和’permission’ 的model位置:
'role'=>'App\Models\Role', 'permission'=>'App\Models\Permission',
7.生成Migration,执行
php artisan migrate
8.创建models
App/Models/Role.php ( 或 app/Role.php)
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Zizaco\Entrust\EntrustRole; class Role extends EntrustRole { // }
App/Models/Permission.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Zizaco\Entrust\EntrustPermission; class Permission extends EntrustPermission { // }
添加User.php 在 App/Models/User.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use zizaco\Entrust\Traits\EntrustUserTrait; use Zizaco\Entrust\HasRole; class User extends Eloquent { // use EntrustUserTrait; use HasRole; }
最后生成自动加载:
composer dump-autoload
相关说明:
A.数据表之间的关系
1.User – 用户, 一个用户可以属于多个用户组, 可以不直接挂载权限, 让用户组和权限绑定。
2.Roles – 用户组,一个用户组拥有多个权限。
3.Permission- 权限,
B.在 php artisan migration 过程中会生成相应数据表:
1.roles – 用户组信息表
2.role_user – 用户和用户组对应关系表
3.permission – 权限信息表
4.permission_role – 权限与用户组对应关系表
————- ————- ————- ————- ————- ————- ————-
案例:
创建用户组(角色):
$role = new Role(); $role -> name = "Admin"; $role->display_name="管理员"; $role->description="是的,我就是管理员"; $role->save();
创建权限:
$permission = new Permission(); $permission->name = 'Manager_users'; $permission->display_name = 'Manager Users'; $permission->save(); //多个权限对应一个角色, 一个角色对应一个用户
设置权限:
$admin = Role::where('name','Admin')->first(); $per = Permission::where('name','Manager_users')->first(); $admin->attachPermission($per);
设置用户组:
$user = User::where('name','=','admin')->first(); $role = Role::where('name','Admin')->first(); $user->attachRole($role); //or $user->roles()->attach($role->id); //id only
使用:
$user = User::where('name','=','admin')->first();
1.判断用户是否属于某个用户组:
if($user->hasRole('Admin')) echo "Yes";
2.判断用户是否拥有某个权限:
if($user->can('Manager_users')) echo "Yes"; if(\Auth::user()->hasRole('Admin')) echo "Yes too";
3.判断多个权限和用户组:
$user->ability(['Admin','Owner'], ['manage_posts','manage_users']); // 或者 $user->ability('Admin,Owner', 'manage_posts,manage_users');
更多功能参考相关连接:
https://packagist.org/packages/zizaco/entrust
https://github.com/Zizaco/entrust