权限模块_整体方案说明

要点说明

权限就是控制功能的使用(功能对应着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. 【JS】jQuery设置定时器,访问服务器(PHP示例)配合微信、支付宝原生支付,跳转web网页

    废话不多说,直接上代码: 把下面的js放在html的</body>即可 <!-- 设置页面定时器,3秒查询一次数据库该订单状态,ok就跳走 --xzz1115> <scr ...

  2. HTML-IE6复制BUG

    在IE6下使用浮动可能会出现文字重复的情况. 在IE6下,浮动层之间有注释文字的话,之前那个浮动层的内容文字就有可能遭遇一个“隐形”的复制,但是代码里查看文字可并没有多出来. 看个例子: XML/HT ...

  3. jquery 常用api 小结2

    *一)jQuery常用方法API实战 (1)DOM简述与分类 A)DOM是一种标准,它独立于平台,语言,浏览器. B)如果项目中,你完全按照DOM标准写代码,你就能在各大主流的浏览器中操作标准控件. ...

  4. Linux命令-权限管理命令:umask

    umask -S 显示用户创建目录或文件时的默认权限 mkdir shuaige 创建一个shuaige目录 ls -ld shuaige 查看shuaige目录当前的权限(和上面默认的权限是一样的) ...

  5. multi-mechanize

    1. 安装 万能的pip&easy_install(python27环境) pip install multi-mechanize mechanize numpy matplotlib mec ...

  6. 用QQ帐号和新浪微博帐号登录网站

    用QQ帐号登录: 先去http://connect.qq.com/intro/login/申请   然后点击验证   将下面代码复制到网站首页中,放进去以后再点击验证就能得到ID和key 第一步:配置 ...

  7. pow(x,y)函数的实现算法(递归函数)

    函数pow(x,y)实现运算x^y,即x的y次方,这里x和y都为整数. 算法的基本思想是,减少乘法次数,重复利用结算结果,例如: x^4,如果逐个相乘的话,需要四次乘法.如果我们这样分解(x^2)*( ...

  8. PCIe调试心得_DMA part1

    作者 :East  FPGA那点事儿 1.PCIe的DMA介绍在PCIe中需要使用DMA的项目,一定要先看XAPP1052,里面包含一个DMA的参考设计,对初学者有极大的帮助. XAPP1052中包含 ...

  9. CXAnimation.h动画类

    /**************************************************************************** 使用一个CCAnimation对象可以CCS ...

  10. CSectsInfomation.cpp文件

    #include "SectsInfomation.h" #include "WidgetMgr.h" #include "XButton.h&quo ...