后台RBAC权限加管理

RBAC权限管理

RBAC(Role-Based Access Control)即基于角色的访问控制,是一种权限设计思想。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员来获得这些角色的权限。相较传统的访问控制(自主访问、强制访问)来说,RBAC 能更好的支持最小权限、责任分离和数据抽象等原则,极大地简化了权限的管理。

在一个组织中,角色是为了完成各种工作而创造,而用户则根据他的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。每个角色都拥有与之相匹配的权限,角色可依据新的需求而赋予新的权限,而权限也可根据需要而从某角色中回收。这样的权限设计,结构清晰、管理方便,也能囊括更广泛的客观情况。

RBAC 的优点主要在于易用和高效。给用户授权时只需要对角色授权,然后将相应的角色分配给用户即可;从技术角度讲,思路清晰且易于实现,且后期维护时只需要维护关系模型,显得简单而高效。

RBAC 的缺点主要有两个:一个是在进行较为复杂的权限校验时需要不断地遍历和递归,会造成一定的性能影响。另一个是缺少数据权限模型,基于 RBAC 来实现数据权限校验比较复杂和低效。

经过 20 多年的发展,RBAC 已被广泛应用到很多领域的系统或软件,同时也产生了许多应用模型。本文的理论部分到此结束,有兴趣了解更多的朋友可参考:

1.1、角色与权限表的设计

在这里插入图片描述

创建迁移文件和模型
在这里插入图片描述
创建基础模型

php artisan make:model Models\Base

在这里插入图片描述
修改角色与权限模型的继承
在这里插入图片描述
修改用户迁移文件添加角色ID
在这里插入图片描述
角色表

Schema::create(‘roles’, function (Blueprint $table) {
$table->bigIncrements(‘id’)->comment(‘id’);
$table->string(‘name’,‘20’)->comment(‘角色名称’);
$table->timestamps();
//软删除
$table->softDeletes();
});

节点表(权限表)

Schema::create(‘node’, function (Blueprint $table) {
$table->bigIncrements(‘id’);
$table->string(‘name’,50)->comment(‘节点名称’);
$table->string(‘route_name’,100)->default(’’)->comment(‘路由别名,权限认证标识’);
$table->unsignedSmallInteger(‘pid’)->default(0)->comment(‘上级ID’);
$table->enum(‘is_menu’,[‘0’,‘1’])->default(‘0’)->comment(‘是否为菜单0否,1是’);
$table->timestamps();
$table->softDeletes();
});

角色权限表

Schema::create(‘role_node’,function(Blueprint $table){
//角色id
$table->unsignedSmallInteger(‘role_id’)->default(0)->comment(‘角色id’);
//节点id
$table->unsignedSmallInteger(‘node_id’)->default(0)->comment(‘节点id’);
});

迁移

php artisan migrate:refresh --seed

1.2、角色管理

创建一个资源控制器和资源路由

php artisan make:controller Admin/RoleController -r/–resource

定义资源路由

Route::resource(‘规则前缀’, ‘控制器名称不要方法’); 定义路由前缀

控制器取数据
>
模板在这里插入图片描述
在这里插入图片描述
添加角色
显示添加界面
在这里插入图片描述
模板 ajax提交
在这里插入图片描述

$("#form-admin-add").validate({
rules:{
name:{
required:true,
// minlength:4,
// maxlength:16
}

	},
	onkeyup:false,
	success:"valid",
	submitHandler:function(form){
		// form.submit();
		//表单提交地址
		let url =$(form).attr('action');
		//表单序列化
		let data = $(form).serialize();

		//jquery post提交
		$.post(url,data).then(({status,msg})=>{
			if(status == 0){
				layer.msg(msg,{icon:1,time:2000},()=>{
					location.href = "{{route('admin.role.index')}}";
				})
			}else{
				layer.msg(msg,{icon:2,time:2000});
			}
		})
	}
});

权限(节点)管理
定义资源路由
在这里插入图片描述
创建资源控制器,并关联模型

php artisan make:controller Admin/NodeController -r -m Models/Node
-m 模型

控制器
在这里插入图片描述
添加节点
使用vue进行界面管理,实现添加功能
在这里插入图片描述
模型中定义修改器
在这里插入图片描述
模板
在这里插入图片描述
在这里插入图片描述
Vue

let _token = "{{ csrf_token() }}";
    new Vue({
        el:'.page-container',
        data:{
            info:{
                'name':'',
                'router_name':'',
                'pid':0,
                'is_menu':'',
                "_token" : _token
            }
        },
        methods:{
            dosubmit(evt){
                // console.log(evt.target);
                let url = evt.target.action;
                $.post(url,this.info).then(ret=>{
                    if(ret.status == 0){
                        location.href="{{route('admin.node.index')}}"
                    }else{
                        layer.msg(ret.msg,{'icon':1,"time":1000})
                    }
                });
            },
            changePid(){
                // this.info.pid = evt.target.value || 0;
            }
        }
    })

定义一个递归层级显示方法
在这里插入图片描述
节点模型中获取数据
在这里插入图片描述
控制器中调用
在这里插入图片描述
模板
在这里插入图片描述

1.3、后台权限控制

给角色分配权限
在这里插入图片描述
定义路由
在这里插入图片描述
模板
在这里插入图片描述
给用户分配角色
用户和角色之间是关系: 属于关系 beLongsTo
在这里插入图片描述
模型
在这里插入图片描述
控制器
在这里插入图片描述
模板
在这里插入图片描述
到这里就结束了,喜欢记得一键三连!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值