现在的位置: 首页 > 综合 > 正文

实现根据角色隐藏或显示模块

2017年11月09日 ⁄ 综合 ⁄ 共 930字 ⁄ 字号 评论关闭

背景:

在B/S模式中,数据库权限设计很重要,根据不同的角色来显示不同的内容,不同的角色看到的内容是不同的。

比如“超级管理员”就可以看到“一般用户”看不到的模块。

我用PowerDesign设计了三张简单的表  分别为“user”“role”“auth”

user
用户编号
用户名称
用户密码
用户编号(pk)

role
角色编号
角色名称
角色编号(pk)

auth
权限编号
权限名称
权限编号(pk)

他们都是多对多的关系


然后生成其physical data model  再然后生成对应数据库的sql文件 我用的mysql  然后导入mysql 

共有5张表


我有一个登录页面  点击登陆后 会执行LoginServlet 处理数据

其中,

String roleSQL = "SELECT rid FROM role WHERE rid=(SELECT rid FROM userrole WHERE uid=(SELECT uid FROM `user` WHERE uname='"
				+ uname + "'))";
ResultSet rsRole = db.execQuery(roleSQL, obj);

来得到角色的id

然后,

session.setAttribute("role", role);

再dispatcher到该去的页面,比如说是index.jsp

到了index.jsp后,结合javascript和el表达式,做一个判断:

function run(){
	var role = '${sessionScope.role}';
	switch(role){
	case '2':{
			var roleManage = document.getElementById("roleManage");
			roleManage.style.display = 'none';
		}
	}
}

然后在body标签的onload中加载该方法


解释一下js代码:

在role表中rid为自增的1,2,3、、、、代表不同的角色

我设置的1为“超级管理员”,2为“一般用户”,“一般用户”没有“修改角色”的功能

这个“修改角色”的模块就是id=roleManage

然后用switch判断一下,如果是2,即“一般用户”,则将“修改角色”的模块隐藏掉

基本算是实现了这样的效果  

不知道是不是规范的做法  有待以后进一步了解与学习



抱歉!评论已关闭.