权限管理指的是用户授权,与拦截器没有关系。拦截器只是一个技术,也可以用别的技术来实现的。别人问你权限管理,可不要和人家说什么拦截器。要说用户授权
前一篇文章是把实现了不同的用户呈现不用的菜单。这一篇文章要实现的是不同的操作权限的控制,因为在菜单下有操作权限,我们现在就控制操作。
我们的权限拦截就是指各种菜单下的操作也要拦截。只要是不符合自己角色的访问操作都要拦截掉。
拦截流程如下:
我们这里不写拦截器,我们这篇文章就是讲一下怎么根据用户的角色来得到用户的操作权限。
sql如下:
select bss_sys_operate.method actionUrl,
bss_sys_operate.operatename operationName,
bss_sys_operate.operateid operationId
from bss_sys_operate where bss_sys_operate.operateid in
( --角色范围内的操作权限集合
select bss_sys_roleoperate.operateid
from bss_sys_role,
bss_sys_rolesys,
bss_sys_rolenode,
bss_sys_rolemodule,
bss_sys_roleoperate where bss_sys_role.roleid = bss_sys_rolesys.roleid
and bss_sys_rolenode.rsid = bss_sys_rolesys.rsid
and bss_sys_rolemodule.rnid = bss_sys_rolenode.rnid
and bss_sys_roleoperate.rmid = bss_sys_rolemodule.rmid
and bss_sys_role.roleid = 'A1657D9C6C7D47B59A99132A5ACE1A2E' )
查询结果如下:
上面查出来的就是卫生局的操作权限。
Sql写好之后。我们就来写Mapper代码:
public List<Operation> findOperatByRoleid(String roleid) throws Exception;
<select id="findOperatByRoleid" parameterType="java.lang.String"
resultType="yycg.base.vo.Operation"
> select bss_sys_operate.method actionUrl,
bss_sys_operate.operatename operationName,
bss_sys_operate.operateid operationId
from bss_sys_operate where bss_sys_operate.operateid in
( <!-- 角色范围内的操作权限集合 -->
select bss_sys_roleoperate.operateid
from bss_sys_role,
bss_sys_rolesys,
bss_sys_rolenode,
bss_sys_rolemodule,
bss_sys_roleoperate where bss_sys_role.roleid = bss_sys_rolesys.roleid
and bss_sys_rolenode.rsid = bss_sys_rolesys.rsid
and bss_sys_rolemodule.rnid = bss_sys_rolenode.rnid
and bss_sys_roleoperate.rmid = bss_sys_rolemodule.rmid
and bss_sys_role.roleid = #{roleid} ) </select>
写好Mapper代码之后我们来写service代码:
List<Operation> operationlist=this.findOperatByRoleid(roleid);//根据用户的角色id得到用户的操作权限。
activeUser.setOperationList(operationlist);//给用户赋予他的操作权限。 //根据角色的id查找角色的可用权限
@Override
public List<Operation> findOperatByRoleid(String roleid) throws Exception {
return sysuserMapperCustom.findOperatByRoleid(roleid);
}
下一篇文章我们就要写拦截器了