上一段做了struts 的用户管理
没有参考别人的用户管理案例,自己想了一套管理的流程,可控制到每个用户的增删改查的权限
Struts 用户管理
描述:
分层管理,最高层à单位层à部门层à员工层
数据库:oracle9i
两个表KKYH表和KKBMQX表
图1为KKYH表
保存用户的一些基本信息和基本权限
ID | 用户名 | 非空 | 主键约束 |
PASSWORD |
密码 | 非空 | |
DW | 单位 | 非空 | |
IDCR | 添加权限 | 非空 | 1为有权限,0为无权限 |
IDCK | 查看权限 | 非空 | 1为有权限,0为无权限 |
IDSC | 删除权限 | 非空 | 1为有权限,0为无权限 |
IDCJ | 超级权限 | 非空 | 1为有权限,0为无权限 |
IDZX | 查看注销过记录权限 | 非空 | 1为有权限,0为无权限 |
BM | 部门 | 非空 | |
DWIDCJ | 单位管理员 | 非空 | 1为有权限,0为无权限 |
IP | 注册时客户机IP | 可空 |
注意:往KKYH里添加记录的话,必须同时要为KKBMQX表里也插入一条ID,DW,BM相同的记录
保存用户的部门权限
ID | 用户名 | 非空 | 与KKYH表ID相同 |
DW | 单位 | 非空 | 与KKYH表DW相同 |
BM | 部门权限 | 非空 | 与KKYH表DW相同 |
演示:
以超级管理员用户登陆,不会受到任何功能上的限制
点击【用户权限管理】,会列出KKYH表中所有单位,当然,需要去掉重复单位;
单位多的话就做成分页显示
下面我们点击一个单位名字,进入看下成员管理页面
注意1:非超级管理员与单位管理员进不到这个管理页面,如果访问则出现提示
注意2:单位管理员只能管理自己所在单位的成员,点击其他单位则出现图附1提示
在成员管理页面,可以通过勾选用户名前边的复选框,来实现对成员的管理,可以使成员具有添加记录,删除记录,查看注销后记录(普通查看权限),查看全部记录(超级查看权限),超级管理员和单位管理员的权限,也可以删除用户,权限更改之后,不需要用户重新登陆便可获得更改后的权限且更改后的权限立即显示在页面上
注意:如果是以单位管理员登陆则设置超级管理员的按钮将不可见
如果想更改某个用户的部门权限,就点击那个用户的用户名,进入到部门权限管理页面
【>>】按钮为把部门权限添加给用户
【<<】按钮为把用户的部门权限删除
用户注册:
1、超级管理员的用户注册页面:
超级管理员登陆后可以添加任何单位的用户,还可以添加超级管理员和单位管理员用户
【注册】将注册一个为有添加和查看自己部门数据权限的用户
【注册超级管理员】将注册一个级别为最高的管理员用户,可以查看任何公司和个人的数据
【注册单位管理员】将注册一个级别为超级管理员的下一级的用户,可以查看本用户所在公司所有部门的数据
2、单位管理员注册页面:
单位管理员登陆后可以添加本单位的普通用户和本单位的管理员用户,不可添加其他单位的用户,[单位]只用来显示本人所在单位,不可更改
【注册单位管理员】将注册一个级别为超级管理员的下一级的用户,可以查看本用户所在公司所有部门的数据
3、普通用户注册页面:
普通用户登陆后可以添加本单位的普通用户,不可添加其他单位的用户,[单位]只用来显示本人所在单位,不可更改
控制:(部分)
首先用户登陆要保存用户的权限信息
写一个User类来封装起来
package domain; import java.util.List; public class UserInfo { private String sessionIDCR; private String sessionIDSC; private String sessionIDCK; private String sessionIDCJ; private String sessionLRDW; private String sessionIDZX; private String sessionBM; private List sessionBMQX; private String sessionDWIDCJ; getters/setters } UserInfo userInfo = userLoginSQLBean.userInfo(userLoginForm); session.setAttribute("userInfo", userInfo) ;
用法:例1,无单位管理权限和超级权限不许访问
UserInfo user = (UserInfo )session.getAttribute("userInfo"); if(!user.getSessionDWIDCJ().equals("1")) { if(!user.getSessionIDCJ().equals("1")) { return mapping.findForward("userNoManage_Succeed"); } }
例2,用户abcd,拥有市场部和开发部的权限,那么只能允许他查看市场部的资料,用sql语句控制就可以了
SELECT hmd.ip as ip,hmd.bm as bm FROM kk.kkhmd hmd,kk.kkyh yh,kk.kkbmqx bmqx WHERE yh.id = 'abcd' and hmd.lrdw = 'XXX公司' and bmqx.bm in ('市场部', '开发部') and yh.id=bmqx.id and hmd.bm=bmqx.bm
当然这个是静态sql,用的时候需要写成动态的拼凑sql
后记:当然这只是我的个人方法,权限的控制可以放在filter里做,万一将来有更改的话,会轻松很多
黑色头发 http://heisetoufa.iteye.com