有角色表,可以修改所拥有的权限,字段 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 身份登录时