权限管理 基于 rbac

有角色表,可以修改所拥有的权限,字段 role_auth_ids  所有的权限id
权限列表,所有的模块以及下面的功能,以无限极分类,pid
管理员表,关联 角色表的role_id

这种方式,总共需要3张表,分别是在这里插入图片描述role_auth_ids 是 这个角色所拥有的所有权限 id
在这里插入图片描述权限列表,等于三级栏目的展示,只是数据库存了它对应的控制器 auth_c 和方法 auth_a
用户表关联角色id

它又是怎么实现的,以不同身份登录展示的模块功能也不一样呢 ???
请看下面

控制器 admin/controller/indexcontroller.class.php 把 角色 所拥有的 权限模块
赋值显示 在了左侧栏

	// 得到当前登录人的角色id
	
if( !empty($manager_info['mg_role_id']) ){        
    $role_id = $manager_info['mg_role_id'];
    //再去查询角色表,对应角色的权限,获取权限ids
    $role_info = M('Role')->find($role_id);
    $where = "where auth_id in({$role_info['role_auth_ids']})";     // 查询条件,权限id集合
}



// 组合了一个level字段,和三级分类的展示差不多,遍历了权限表就添加了一个 	   
   level 字段,用来判断是第几级
 
 $sql = "select t.auth_id,t.auth_pid,t.auth_name,t.auth_c,t.auth_a,length(t.auth_str_order) - length(replace(t.auth_str_order,'-','')) lev from (
 (select auth_id,auth_pid,auth_name,auth_c,auth_a,concat(auth_path_str,'-',auth_id) auth_str_order from sw_auth {$where} order by auth_str_order asc) t
 ) having lev <=2";

 $auth_data = M()->query($sql);

首页的左侧栏 ,admin/view/index/left.html
遍历显示出了权限模块 foreach($auth_data as $ k=>$ v)

至于怎么显示的,只是根据用户的角色id,获取到他拥有的所有权限,然后查权限列表,
组合添加了一个  level字段  来判断是第几级,跟3级遍历显示一样

level 等于 1 的时候,点击是 # ,
等于 2 的时候,点击地址是  <a href="{:U($v['auth_c'].'/'.$v[auth_a])}"  这方法不错


<php> foreach($auth_data as $k=>$v) : </php>
 <php> if($v['lev'] == 1) : </php>
     <table cellspacing=0 cellpadding=0 width=150 border=0>
         <tr height=22>
             <td style="padding-left: 30px" background={$Think.const.ADMIN_IMG_URL}menu_bt.jpg>
                 <a class=menuparent onclick=expand({$v['auth_id']}) href="javascript:void(0);">{$v['auth_name']}</a>
             </td>
         </tr>
         <tr height=4>
             <td></td>
         </tr>
     </table>
 <php>endif;</php>
 <php> if($v['lev'] == 2) : </php>
     <table  cellspacing=0 cellpadding=0  width=150 border=0>
         <tr height=20>
             <td align=middle width=30>
                 <img height=9 src="{$Think.const.ADMIN_IMG_URL}menu_icon.gif" width=9>
             </td>
             <td><a href="{:U($v['auth_c'].'/'.$v[auth_a])}" class=menuchild  target="right">{$v['auth_name']}</a></td>
         </tr>
         <tr height=4><td colspan=2></td></tr>
     </table>
 <php>endif;</php>
 <php>endforeach;</php>

最终效果图

当以 goods 身份登录时
在这里插入图片描述
当以 admin 身份登录时
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39835505/article/details/86308815