权限模块_整体方案说明_设计实体&映射实体_实现初始化权限数据的功能
权限模块_整体方案说明
要点说明
权限就是控制功能的使用(功能对应着URL)。
对功能的控制就是对URL的访问控制。
在我们的程序中,一个功能对应一个或两个URL:
1,例如列表或删除功能,只对应一个URL.
2,例如添加或修改功能,对应两个URL:..add, ..addUI
权限模型

权限方案:
用户 *----* 角色 *----* 权限
与权限相关的功能具体有哪些:
初始化数据:...
分配权限:...
使用权限:...
具体有哪些功能
初始化数据(安装)
权限数据。
超级管理员。
分配权限
给角色分配权限。
用户的权限就是用户所有角色的权限。
使用权限
1,登录、注销、主页面。
2,左侧的菜单是根据权限显示的。
3,右侧页面中的链接是根据权限显示的。
4,拦截每一个action请求,验证用户是否有权限访问。
权限模块_设计实体&映射实体

实体:
javaBean --> hbm.xml --> 建表

Privilege.java
public class Privilege {
private Long id;
private String url;
private String name; //权限名称
private Set<Role> roles = new HashSet<Role>();
private String parent; //上级权限
private Set<Privilege> children = new HashSet<Privilege>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public Set<Privilege> getChildren() {
return children;
}
public void setChildren(Set<Privilege> children) {
this.children = children;
}
}
Role.hbm.xml
<hibernate-mapping package="cn.itcast.oa.domain">
<class name="Role" table="itcast_role">
<id name="id">
<generator class="native" />
</id>
<property name="name"></property>
<property name="description"></property> <!-- users属性,本类与User的多对多 -->
<set name="users" table="itcast_user_role">
<key column="roleId"></key>
<many-to-many class="User" column="userId"></many-to-many>
</set> <!-- privileges属性,本来与Privilege的多对多 -->
<set name="privileges" table="itcast_role_privilege">
<key column="roleId"></key>
<many-to-many class="Privilege"></many-to-many>
</set>
</class>
</hibernate-mapping>
Privilege.hbm.xml
<hibernate-mapping package="cn.itcast.oa.domain">
<class name="Privilege" table="itcast_privilege">
<id name="id">
<generator class="native" />
</id>
<property name="url"></property>
<property name="name"></property> <!-- roles属性,本类与Role的多对多 -->
<set name="roles" table="itcast_role_privilege">
<key column="privilegeId"></key>
<many-to-many class="Role" column="userId"></many-to-many>
</set> <!-- parent属性,本类与Privilege(上级)的多对一 -->
<many-to-one name="parent" class="Privilege" column="parentId"></many-to-one> <!-- children属性,本类与Privilege(下级)的一对多 -->
<set name="children" >
<key column="parentId"></key>
<one-to-many class="Privilege"/>
</set>
</class>
</hibernate-mapping>
加到hibernate.cfg.xml
<mapping resource="cn/itcast/oa/domain/Privilege.hbm.xml" />
运行SpringTest.java中的testSessionFactory()方法生成表结构看对不对
权限模块_实现初始化权限数据的功能
顶级菜单的作用是对二级菜单分类,没有具体的url地址
Privilege.java
public class Privilege {
private Long id;
private String url;
private String name; //权限名称
private Set<Role> roles = new HashSet<Role>();
private Privilege parent; //上级权限
private Set<Privilege> children = new HashSet<Privilege>();
public Privilege(){}
public Privilege(String name, String url, Privilege parent) {
this.name = name;
this.url = url;
this.parent = parent;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public Privilege getParent() {
return parent;
}
public void setParent(Privilege parent) {
this.parent = parent;
}
public Set<Privilege> getChildren() {
return children;
}
public void setChildren(Set<Privilege> children) {
this.children = children;
}
}
Installer.java
@Controller
public class Installer {
@Resource
private SessionFactory sessionFactory; /**
* 执行安装
*/
@Transactional
public void install() { Session session = sessionFactory.getCurrentSession(); //保存超级管理员用户
User user = new User();
user.setLoginName("admin");
user.setName("超级管理员");
user.setPassword(DigestUtils.md5Hex("admin"));
session.save(user); //保存 //保存权限数据
Privilege menu, menu1, menu2,menu3,menu4,menu5;
menu = new Privilege("系统管理", null, null);
menu1 = new Privilege("岗位管理", "/role_list",menu);
menu2 = new Privilege("部门管理", "/department_list",menu);
menu3 = new Privilege("用户管理", "/user_list",menu);
session.save(menu);
session.save(menu1);
session.save(menu2);
session.save(menu3); session.save(new Privilege("岗位列表", "/role_list", menu1));
session.save(new Privilege("岗位删除", "/role_delete", menu1));
session.save(new Privilege("岗位添加", "/role_add", menu1));
session.save(new Privilege("岗位修改", "/role_edit", menu1)); session.save(new Privilege("部门列表", "/department_list", menu2));
session.save(new Privilege("部门删除", "/department_delete", menu2));
session.save(new Privilege("部门添加", "/department_add", menu2));
session.save(new Privilege("部门修改", "/department_edit", menu2)); session.save(new Privilege("用户列表", "/user_list", menu3));
session.save(new Privilege("用户删除", "/user_delete", menu3));
session.save(new Privilege("用户添加", "/user_add", menu3));
session.save(new Privilege("用户修改", "/user_edit", menu3));
session.save(new Privilege("初始化密码", "/user_initPassword", menu3)); menu = new Privilege("网上交流", null, null);
menu1 = new Privilege("论坛管理", "/forumManage_list",menu);
menu2 = new Privilege("论坛", "/forum_list",menu);
session.save(menu);
session.save(menu1);
session.save(menu2); menu = new Privilege("审批流转", null, null);
menu1 = new Privilege("审批流程管理", "/processDefinition_list",menu);
menu2 = new Privilege("申请模板管理", "/template_list",menu);
menu3 = new Privilege("起草申请", "/flow_templateList",menu);
menu4 = new Privilege("待我审批", "/flow_myTaskList",menu);
menu5 = new Privilege("我的申请查询", "/flow_myApplicationList",menu);
session.save(menu);
session.save(menu1);
session.save(menu2);
session.save(menu3);
session.save(menu4);
session.save(menu5);
}
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Installer installer = (Installer) ac.getBean("installer");
installer.install();
}
}

权限模块_整体方案说明_设计实体&映射实体_实现初始化权限数据的功能的更多相关文章
- asp.net core权限模块的快速构建
大部分系统都会有权限模块,别人家系统的权限怎么生成的我不知道,我只知道这样做是可以并且挺好的. 文章中只对asp.net core的部分代码进行说明 呃 记录~,mvc版本自行前往仓库查阅 代码中的一 ...
- 权限模块_使用权限_实现主页面的效果_显示左侧菜单&只显示有权限的菜单项
权限模块__使用权限__实现主页面的效果 HomeAction.java public class HomeAction extends ActionSupport { public String i ...
- 解析大型.NET ERP系统 权限模块设计与实现
权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...
- Web应用程序系统的多用户权限控制设计及实现-权限模块【10】
前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的权限配置模块.页面模块涉及到的数据表为权限表.权限配置模块是按照用户组和页面,栏目结合组成的.通过配置一个用 ...
- BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...
- BZOJ_2738_矩阵乘法_整体二分
BZOJ_2738_矩阵乘法_整体二分 Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下 ...
- 用图形数据库Neo4j 设计权限模块
已经 SpringSecurity 在几个项目中 实现权限模块,对于数据库,也是思考了不少,从Mysql 到 mongodb 都不是特别满意, 在Mysql中,如果权限相对简单,那么还能接受,如果稍微 ...
- 基于ASP.Net Core开发一套通用后台框架记录-(数据库设计(权限模块))
写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...
- [刘阳Java]_Web前端入门级练习_迅雷首页第一屏设计
今天接着上一篇文章<Web前端入门级练习_迅雷官宣网设计>正式开始迅雷首页第一版的设计.如果完成,则最终的效果图如下 第一步:先完成logo部分的设计 logo设计,我们会使用CSS的定位 ...
随机推荐
- [Verilog]随意整数(奇数,偶数)分频器设计, 50%占空比
module div_clk(clk_in, divisor, clk_out); input clk_in; input divisor; output clk_out; reg clk_out = ...
- 【linux】查看内存和CPU使用情况
1.内存命令:free 解释:以上数据单位KB. 所以,上面的mem物理内存共1G 下面是对这些数值的解释: total:总计物理内存的大小. used:已使用多大. free:可用有多少. Shar ...
- PHP-WebService中Endpoint、Disco、WSDL都是做什么的?
Endpoint: http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx web服务的URI地址,你访问之后,就会出现web服务的相 ...
- PHP-"php://(类型)"访问各个输入/输出流以及全局变量$HTTP_RAW_POST_DATA讲解
$_POST $HTTP_RAW_POST_DATA php://input 先来讲以上三者的区别: $_POST:以关联数组方式组织提交的数据, 并对原数据进行编码处理(urldecode)和编码转 ...
- Linux 设置IP,gate, 以及自动获取IP的方法
一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 b ...
- DHCP(动态主机配置协议)工作流程
一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...
- AutoFac文档8(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 泛型 给定一个开放的泛 ...
- 飘逸的python - ord和chr以及unichr
ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相相应转换的. 可是因为chr局限于ascii,长度仅仅有256. 于是又多了个uni ...
- struts2拦截器的实现原理及源码剖析
拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...
- Nokia Imaging SDK 的高级使用—实时滤镜拍照
有关 Nokia Imaging SDK 的初级使用,可以参考:Nokia Imaging SDK滤镜使用入门 本文的主题: 1.如何 PhotoCaptureDevice 类使用,以及如何在 Med ...