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

权限模块_整体方案说明

要点说明

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

时间: 2024-11-06 19:18:09

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

韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏

韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 分类: PHP 2012-12-12 15:01 4256人阅读 评论(0) 收藏 举报 文西马龙:http://blog.csdn.net/wenximalong/ 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键,来控制图片的位置 这个小游戏,用面向对象会很方便,不用面向对象会很麻烦很麻烦,比如以后要讲解的坦克大战的游戏,要是用纯的面向过程或

论坛模块_设计及映射本模块的所有实体

论坛模块_设计本模块的所有实体 实体有几个,有什么关系,属性:主键.关联关系属性.一般属性.特殊属性(解决某个问题而设计[排序]),最后在看一遍设计的属性能满足这个页面和那个页面吗 主题数和文章数在Forum实体中新增topicCount和articleCount两个属性发帖删帖对应加1减一,把它当做普通的属性显示就没有效率性能的问题了,因为查询的操作远远多于发删帖,查询的数据很多 最后发表的主题也在Forum中设计lastTopic属性,只要发新主题了把这个属性改一下 主题的标题.内容时间.作

系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构

系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这个实体有关联关系. 3,每个实体中都有什么属性? 1,主键.推荐使用代理主键 2,关联关系属性.在类图中,关联关系是一条线,有两端,每一端对应一个表达此关联关系的属性.有几个端指向本类,本类中就有几个关联关系属性. 3,一般属性.分析所有有关的页面,找出表单中要填写的或是在显示页面中要显示的信息等.

权限模块_分配权限_实现分配权限(登录与注销)的基本功能

权限模块_分配权限_实现分配权限的基本功能 选哪个就能存起来那个,能回显.有依赖关系 把一组相关功能放在一起 RoleAction.java /** * 设置权限页面 */ public String setPrivilegeUI() { //准备回显的数据 Role role = roleService.getById(model.getId()); ActionContext.getContext().getValueStack().push(role);//放到栈顶,从栈顶找对象 if(r

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

权限模块__使用权限__实现主页面的效果 HomeAction.java public class HomeAction extends ActionSupport { public String index() { return "index"; } public String top() { return "top"; } public String bottom() { return "bottom"; } public String le

权限模块_使用权限_显示有权限的链接_思路分析_拦截验证每个请求的权限_完善权限的分类_一些细节

权限模块__使用权限__显示有权限的链接1__思路分析 实现功能 导入源文件,找到AnchorTag.java类复制到工程中 AnchorTag.java package org.apache.struts2.views.jsp.ui; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException;

权限模块_分配权限_显示树状结构_页面中的选中效果

权限模块__分配权限__显示树状结构1 显示树状结构:依赖关系 setPrivilegeUI.jsp <!-- 显示权限树 --> <td> <!--用它回显 <s:checkboxlist name="privilegeIds" list="#privilegeList" listKey="id" listValue="name"></s:checkboxlist> --

Linux电源管理(1)_整体架构(转自蜗窝科技,www.wowotech.net)

Linux电源管理(1)_整体架构(转自蜗窝科技,www.wowotech.net) 1. 前言 在这个世界中,任何系统的运转都需要能量.如树木依靠光能生长,如马儿依靠食物奔跑,如计算机系统依靠电能运行.而 能量的获取是有成本的,因此如果能在保证系统运转的基础上,尽量节省对能量的消耗,就会大大提升该系统的生存竞争力.这方面,大自然已经做的很好了,如植 物的落叶,如动物的冬眠,等等.而在计算机的世界里(这里以运行Linux OS的嵌入式系统为例),称作电源管理(Power Management).

数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)

本文出自:http://blog.csdn.net/svitter 题目12:计算机学院学生会的打印机(优先队列) 小明抱怨学生会的打印机不符合FIFO的原则,看到很多在他后面来打印的同学比他先打印出来.五分钟前,小明的文件就是下一个候选的,如今小明的文件又排到了后面.学生会的同学给小明解释说,学生会的打印机不是採用传统的队列方式,而是採用一种自定义的优先队列方式:每一个要打印的文件被赋予了一个从1到9的优先级(9最高,1最低).打印规定例如以下: 将队列中要打印的文件f从队列中拿出来: 假设在