laravel的rbac

1、安装Entrust

    通过composer安装扩展包 :composer require zizaco/entrust 5.2.x-dev

   安装完成后需要在config/app.php中注册服务提供者到providers数组:

        Zizaco\Entrust\EntrustServiceProvider::class,

   同时在该配置文件中注册相应门面到aliases数组:

      'Entrust' => Zizaco\Entrust\EntrustFacade::class,

   如果使用中间件需要添加如下代码到app/Http/Kernel.php的routeMiddleware数组:

   'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,

   'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,

   'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,

2、配置

在配置文件config/auth.php中设置合适的值,Entrust会使用这些配置值来选择相应的用户表和模型类。

php artisan vendor:publish

该命令会在config目录下创建一个entrust.php文件。

3、用户角色权限表

使用Entrust提供的迁移命令生成迁移文件:

php artisan entrust:migration

然后通过以下命令生成相应的数据表:

php artisan migrate

最终会生成4张新表:

roles—— 存储角色

permissions—— 存储权限

role_user—— 存储角色与用户之间的多对多关系

permission_role—— 存储角色与权限之间的多对多关系

4、模型类

Role

我们需要创建Role模型类app/Models/Role.php并编辑其内容如下:

use Zizaco\Entrust\EntrustRole;
class Role extends EntrustRole{}

Permission

接下来创建Permission模型app/models/Permission.php并编辑其内容如下:

use Zizaco\Entrust\EntrustPermission;
class Permission extends EntrustPermission
{
    
}

User

接下来我们在User模型中使用EntrustUserTrait:

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use Illuminate\Database\Eloquent\Model;  

class User extends Authenticatable
{
    use EntrustUserTrait
    {
        EntrustUserTrait::can as hasPermission;
    }
}

5.创建角色/权限并进行分配

/**
     * 添加角色
     */
    public function add_role()
    {
        $role=new Role();
        $role->name='admin';
        $role->display_name='超级管理员';
        $role->description='';
        $role->save();
    }
    /**
     * 给用户分配角色
     */
    public function send_role()
    {
        $user = User::where('id', '=', '1')->first();

        //分配一个用户

        $user->attachRole(1);   //将角色id为1的分配给用户

        //分配多个角色

        $user->attachRoles()   //括号里放数组

    }

 /**
     * 添加权限
     */
    public function add_permission()
    {
        $createPost = new Permission();
        $createPost->name = 'login';
        $createPost->display_name = '登录';
        $createPost->description = '';
        $createPost->save();
    }  

/**
     * 分配权限
     */
    public function send_permission()
    {
        //查询角色id为5的
        $role = Role::where(['id'=>1])->first();
        //分配单个权限
        $role->attachPermission(1);
        //分配多个权限
        $role->attachPermission(array(1,2,3));
    }

6、检查角色&权限

    //检查用户是否有admin的角色,成功返回true否则false
    $user->hasRole('admin');
    //检查用户是否有login的权限,成功返回true否则false,一下两者皆可
    $user->can("login");
    $user->hasPermission('login');

7.用中间件验证用户是否有当前路由的权限

namespace App\Http\Middleware;

use Closure;
use App\Http\Models\Admin;

class RbacMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $uid=\Session::get('admin_id');
        $user=Admin::where(['id'=>$uid])->first();

       //获取当前访问的路由

        $uri = $request->path();
        if($uri!='admin/index' && $user->hasPermission($uri)==false){
            return redirect('admin/index');
        }
        return $next($request);
    }





  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值