权限模块_整体方案说明

要点说明

权限就是控制功能的使用(功能对应着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();
}
}

权限模块_整体方案说明_设计实体&映射实体_实现初始化权限数据的功能的更多相关文章

  1. asp.net core权限模块的快速构建

    大部分系统都会有权限模块,别人家系统的权限怎么生成的我不知道,我只知道这样做是可以并且挺好的. 文章中只对asp.net core的部分代码进行说明 呃 记录~,mvc版本自行前往仓库查阅 代码中的一 ...

  2. 权限模块_使用权限_实现主页面的效果_显示左侧菜单&只显示有权限的菜单项

    权限模块__使用权限__实现主页面的效果 HomeAction.java public class HomeAction extends ActionSupport { public String i ...

  3. 解析大型.NET ERP系统 权限模块设计与实现

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

  4. Web应用程序系统的多用户权限控制设计及实现-权限模块【10】

    前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的权限配置模块.页面模块涉及到的数据表为权限表.权限配置模块是按照用户组和页面,栏目结合组成的.通过配置一个用 ...

  5. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

  6. BZOJ_2738_矩阵乘法_整体二分

    BZOJ_2738_矩阵乘法_整体二分 Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下 ...

  7. 用图形数据库Neo4j 设计权限模块

    已经 SpringSecurity 在几个项目中 实现权限模块,对于数据库,也是思考了不少,从Mysql 到 mongodb 都不是特别满意, 在Mysql中,如果权限相对简单,那么还能接受,如果稍微 ...

  8. 基于ASP.Net Core开发一套通用后台框架记录-(数据库设计(权限模块))

    写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...

  9. [刘阳Java]_Web前端入门级练习_迅雷首页第一屏设计

    今天接着上一篇文章<Web前端入门级练习_迅雷官宣网设计>正式开始迅雷首页第一版的设计.如果完成,则最终的效果图如下 第一步:先完成logo部分的设计 logo设计,我们会使用CSS的定位 ...

随机推荐

  1. (四)hibernate关联映射之——一对多映射

    0.   映射分四种类型: 一对多 多对一 一对一 多对多 前两者最常用 1.单向一对多关联 1.1  如何在JAVA和数据库中表示一对多的关系. 2.多对一关联 以学生对应班级来解释 步骤(1)创建 ...

  2. HttpSolrServer 实例管理参考,来自org.eclipse.smila.solr

    http://dev.eclipse.org/svnroot/rt/org.eclipse.smila/trunk/core/org.eclipse.smila.solr/code/为什么要对实例管理 ...

  3. IntelliJ Idea各种技巧设置笔记和错误解决

    版本控制 GitHub GitHub提示找不到路径: 解决方法:去官方下载gitHub,然后在以下路径找到Git.exe并设置 C:\Users\你的用户\AppData\Local\GitHub\P ...

  4. mosquitto 启动命令

    启动命令 mosquitto [-c config file] [ -d | --daemon ] [-p port number] [-v] -c 后面跟的是启动mosquitto可以调整的参数,比 ...

  5. 摘:LIB和DLL的区别与在VC中的使用

    共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数 ...

  6. LOSF海量小文件问题解决思路及开源库

    "+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"一.问题产生原因以 ...

  7. Java Persistence with MyBatis 小结1

    数据持久层做的工作是1)将从数据库中查询到的数据生成需要的java对象:2)将 Java 对象中的数据通过 SQL 持久化到数据库中. MyBatis 通过抽象底层的 JDBC 代码,自动化 SQL ...

  8. iOS第三方开源库的吐槽和备忘

    转自:http://blog.ibireme.com/2013/09/23/ios-third-party-libs/#more-41361 由 ibireme 发表于 2013/09/23 做iOS ...

  9. Bootstrap的js插件之折叠(collapse)

    data-toggle="collapse"--指明该元素具有折叠功能: data-target--设置元素打开折叠后指向的元素链接. .collapse--用来设置元素为折叠内容 ...

  10. $q服务的使用

    1. 创建一个Service,去服务器读取数据: // $q 是内置服务,所以可以直接使用 ngApp.factory('UserInfo', ['$http', '$q', function ($h ...