基于数据库的菜单权限控制

   web项目的安全问题越来越受到重视,我们知道web项目中常见攻击漏洞方式有:水平攻击,垂直攻击,我们都晓得水平攻击只需要利用session或者cookie加密userid,防止恶意篡改数据即可。接下来我们通过例子来设计基于数据库的菜单权限控制可以在一定程度上防止垂直攻击。

  我们都知道对于权限的控制如果粒度控制到增删改查的话,就过细节了,我们尽量控制在对于功能模块中,然后再细分增删改查。整个权限控制大致可以划分为5张表,部分表也可省略。

用户模块 菜单模块 资源模块


USER
USER_ID                                                               
USER_NAME                                                 
LOGIN_ID                                            USER_PASSWORD                                    
OTHER_MESS                                
用户ID 姓名 登陆账号 密码 其他信息

ROLE
ROLE_ID ROLE_NAME ROLE_TYPE
角色ID 角色名称 角色类型
USER_ROLE
USER_ID ROLE_ID
用户ID 角色ID


MODULE
MODULE_ID                              MODULE_NAME                                  MODULE_CODE         PID                              INDEX                                      URL                            
ID 模块名称 模块英文名 该模块父类ID 菜单等级 c操控资源地址


AUTHORIZATION
AUTHORIZATION_ID                   AUTHORIZATION_NAME                    AUTHORIZATION_CODE          MODULE_ID                            MODULE_URL                
ID 权限名称 权限英文名 模块ID 资源地址
ROLE_AUTHORIZATION
AUTHORIZATION_ID
ROLE_ID
权限ID 角色ID

我们制作一个er图方便理解
基于数据库的菜单权限控制
各个表外键设计如上图示范。这里最主要的就是先取得用户的角色role_id判断他的身份然后和资源表连接从而判断他操控的资源模块。
sql脚本给出:
  select * from( select t2.role_id role_id,t2.name role_name, u.* from user_role t,role t2,user u where t.user_id=u.user_id and     t2.role_id=t.role_id)a
,(select r2.role_id,r.* from authorization r,role_authorization r2 where r.authorization_id=r2.authorization_id) b where a.role_id=b.role_id
这样可以查询每个用户所对应可操作权限的模块,在系统中可以通过登陆给定的信息判断资源,对不可操作菜单给予不显示。