背景:
在B/S模式中,数据库权限设计很重要,根据不同的角色来显示不同的内容,不同的角色看到的内容是不同的。
比如“超级管理员”就可以看到“一般用户”看不到的模块。
我用PowerDesign设计了三张简单的表 分别为“user”“role”“auth”
用户编号 用户名称 用户密码 |
---|
用户编号(pk) |
角色编号 角色名称 |
---|
角色编号(pk) |
权限编号 权限名称 |
---|
权限编号(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,即“一般用户”,则将“修改角色”的模块隐藏掉
基本算是实现了这样的效果
不知道是不是规范的做法 有待以后进一步了解与学习