基于数据库的菜单权限控制
web项目的安全问题越来越受到重视,我们知道web项目中常见攻击漏洞方式有:水平攻击,垂直攻击,我们都晓得水平攻击只需要利用session或者cookie加密userid,防止恶意篡改数据即可。接下来我们通过例子来设计基于数据库的菜单权限控制可以在一定程度上防止垂直攻击。
我们都知道对于权限的控制如果粒度控制到增删改查的话,就过细节了,我们尽量控制在对于功能模块中,然后再细分增删改查。整个权限控制大致可以划分为5张表,部分表也可省略。
用户模块 | 菜单模块 | 资源模块 | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
我们制作一个er图方便理解
各个表外键设计如上图示范。这里最主要的就是先取得用户的角色role_id判断他的身份然后和资源表连接从而判断他操控的资源模块。
各个表外键设计如上图示范。这里最主要的就是先取得用户的角色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
,(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
这样可以查询每个用户所对应可操作权限的模块,在系统中可以通过登陆给定的信息判断资源,对不可操作菜单给予不显示。