基于角色的权限控制 - RBAC

实现步骤:

一 、数据库字段设计:

大体可分为三个数据表(权限表,角色表 和 管理员表),在角色表中有权限id列表字段,这个字段可再细分(也就是说可以和管理员表的id字段组成另一个表)。

权限表字段包括:id,权限名称,模块名称,控制器名称,方法名称,父级id,level字段(为了实现树状结构),全路径字段(和id连接,实现相同父级的id排序一起)。

角色表字段包括:id,角色名称 和 角色拥有的权限列表。

管理员表字段包括:id,管理员名称,管理员密码,和角色id ,加密密钥(salt)。

注:字段的设计类型选择最小类型。所有字段都加上not null ,可为空则default设置。给搜索频繁的字段加上索引。并给每个字段和表都注释。


二、在权限模块中,获取树状结构数据

//调用tp中 $_validate 方法 对表单进行验证
	protected $_validate = array(
		array('pri_name','require','权限名称不能为空!'),
		array('module_name','require','模块名称不能为空'),
		array('controller_name','require','控制器名不能为空'),
		array('action_name','require','方法名不能为空'),
	);

//获取树形结果的数据
	public function getPriTree($pri_level = 2)
	{
		$sql = 'SELECT * FROM sh_privilege WHERE pri_level <= '.$pri_level.'   ORDER BY CONCAT(pri_path,"-",id) ASC';
		
		return $this->query($sql);

	}

	//添加插入数据时的,前置钩子
	public function _before_insert(&$data,$option)
	{
		//对pri_level和pri_path 数据的拼装
		//pri_level 的值 是上个pri_level值+1 ,pri_path 的值为上父级的pri_path+id,若是为顶级则pri_level和pri_path都为0
		if($data['parent_id'] != 0)
		{
			//取出上级父id 的 pri_level 和 pri_
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值