spring项目篇4----编写角色与权限

首先,先建立四个表

角色表

权限表

角色与权限关系表

员工与角色表

然后使用插件生成pojo类以及映射文件并把xml文件移动到recourses文件中,接下来编写前端页面,跟之前编写的员工前端页面差不多

role.jsp

<%--工具栏--%>
<div id="toolbar">
    <a href="#" class="easyui-linkbutton" data-options="iconCls:‘icon-add‘,plain:true" id="add">添加</a>
    <a href="#" class="easyui-linkbutton" data-options="iconCls:‘icon-edit‘,plain:true" id="edit">编辑</a>
    <a href="#" class="easyui-linkbutton" data-options="iconCls:‘icon-remove‘,plain:true" id="remove">删除</a>
</div>

<%--数据表格--%>
<div id="dg"></div>

<%--添加/编辑对话框 --%>
<div id="dialog">
    <form id="myform">
        <table align="center" style="border-spacing: 20px 30px">
            <input type="hidden" name="id">
            <tr align="center">
                <td>角色编号: <input type="text" name="number" ></td>
                <td>角色名称: <input type="text" name="name"></td>
            </tr>
            <tr>
                <td><div id="role_data1"></div></td>
                <td><div id="role_data2"></div></td>
            </tr>
        </table>
    </form>
</div>

index页面的角色处理绑定于今天看的馋不多就不再展示,可以去github看源码

role.js

$(function () {
    //角色数据列表
    $("#dg").datagrid({
        url: "/role/list",
        columns: [[
            {field: ‘number‘, title: ‘角色编号‘, width: 100, align: ‘center‘},
            {field: ‘name‘, title: ‘角色名称‘, width: 100, align: ‘center‘},
        ]],
        fit: true,
        fitColumns: true,
        rownumbers: true,
        pagination: true,
        singleSelect: true,
        striped: true,
        toolbar: "#toolbar",
    });

    // 编辑/新增的对话框
    $(‘#dialog‘).dialog({
        width: 600,
        height: 650,
        buttons: [{
            text: "保存",
            handler: function () {
                // 判断当前操作是编辑还是新增
                let id = $("[name = ‘id‘]").val();
                let url = id ? "/role/update" : "/role/add";
                // 提交表单
                $("#role_form").form("submit", {
                    url:url,
                    // 提交前补充参数
                    onSubmit:function (param) {
                        // 获取以选择权限
                        let rows = $(‘#select_permission‘).datagrid("getRows");
                        // 遍历所有权限,并添加到请求参数中
                        for(let i =0; i< rows.length; i++){
                            param["permissions["+i+"].id"] = rows[i].id;
                        }
                    },
                    success:function (data) {
                        data = $.parseJSON(data);
                        if (data.success){
                            $.messager.alert("提示",data.msg);
                            // 关闭对话框
                            $("#dialog").dialog("close");
                            /*重新加载数据表格*/
                            $("#dg").datagrid("reload");
                        } else {
                            $.messager.alert("温馨提示",data.msg);
                        }
                    }
                })
            }
        }, {
            text: ‘关闭‘,
            handler: function () {
                $("#dialog").dialog("close");
            }
        }],
        closed: true,
    });

    // 权限列表需要放在下边,否则上面那个就会把样式覆盖
    // 展示是所有权限列表
    $(‘#all_permission‘).datagrid({
        title: "全部权限",
        width: 250,
        height: 400,
        fitColumns: true,
        singleSelect: true,
        url: "/permission/list",
        columns: [[
            {field: "name", title: "权限名称", width: 100, align: "center"},
        ]],
        // 点击一行时的回调
        onClickRow: function (rowIndex, rowData) {
            // 取出所有已经选择的权限
            let rows = $(‘#select_permission‘).datagrid("getRows");
            // 对每一个row进行判断
            for (let i = 0; i < rows.length; i++) {
                // 取出一行
                let row = rows[i];
                // 查看是否存在该权限
                if (rowData.id === row.id) {
                    // 在已选权限中获取该权限下标
                    let index = $("#select_permission").datagrid(‘"getRowIndex‘, row);
                    // 选中该行
                    $(‘#select_permission‘).datagrid("selectRow", index);
                    return
                }
            }
            // 没有就添加
            $(‘#select_permission‘).datagrid("appendRow", rowData);
        }
    });

    // 选中权限列表
    $("#select_permission").datagrid({
        title: "已选权限",
        width: 250,
        height: 400,
        singleSelect: true,
        fitColumns: true,
        columns: [[
            {field: ‘name‘, title: ‘权限名称‘, width: 100, align: ‘center‘},
        ]],
        onClickRow: function (rowIndex, rowData) {
            // 删除当中选中的一行
            $("#select_permission").datagrid("deleteRow", rowIndex);
        }
    });

    // 添加角色
    $("#add").click(function () {
        // 清空表单
        $("#role_form").form("clear");
        // 清空已选权限
        $("#select_permission").datagrid("loadData", {rows: []});
        // 设置标题
        $("#dialog").dialog("setTitle", "添加角色");
        // 打开对话框
        $("#dialog").dialog("open");
    });

    // 修改角色
    $(‘#edit‘).click(function () {

        // 获取当前选中的数据
        let rowData = $("#dg").datagrid("getSelected");
        if(!rowData){
            $.messager.alert("提示", "请选择一条数据进行编辑!");
            return
        }
        // 获取当前角色的所有权限
        let options = $(‘#select_permission‘).datagrid("options");
        options.url = "/permission/show?id=" + rowData.id;

        // 重新加载数据
        $(‘#select_permission‘).datagrid("load");

        // 选中数据回显
        $(‘#role_form‘).form("load", rowData);

        // 设置标题
        $(‘#dialog‘).dialog("setTitle", "编辑角色");

        // 打开对话框
        $(‘#dialog‘).dialog("open");
    })

    // 删除角色
    $(‘#remove‘).click(function () {
        // 获取当前选中的数据
        let rowData = $("#dg").datagrid("getSelected");
        if(!rowData){
            $.messager.alert("提示", "请选择一条数据删除!");
            return
        }
        // get方法默认会把数据反序列化
        $.get("/role/delete?id=" + rowData.id, function (data) {
            if (data.success){
                $.messager.alert("提示",data.msg);
                // 关闭对话框
                $("#dialog").dialog("close");
                /*重新加载数据表格*/
                $("#dg").datagrid("reload");
            } else {
                $.messager.alert("温馨提示",data.msg);
            }
        })
    })
});

接下来修改一下自动生层的Role的pojo类

public class Role {
    private Integer id;

    private String number;

    private String name;

    /*一个角色对应多个权限*/
    private List<Permission> permissions = new ArrayList<>();
}

写一下实现的controller

package com.yang.web;

import com.yang.domain.AjaxRes;
import com.yang.domain.PageListRes;
import com.yang.domain.QueryVo;
import com.yang.domain.Role;
import com.yang.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class RoleController {

    /*注入业务层*/
    @Autowired
    private RoleService roleService;

    @RequestMapping("/role")
    public String role() {
        return "role";
    }

    /*获取角色列表,分页 */
    @RequestMapping("/role/list")
    @ResponseBody
    public PageListRes roleList(QueryVo queryVo) {
        /*调用业务层直接查询*/
        return roleService.getRoles(queryVo);
    }

    /*添加角色*/
    @RequestMapping("/role/add")
    @ResponseBody
    public AjaxRes roleAdd(Role role) {
        AjaxRes ajaxRes = new AjaxRes();
        try {
            // 调用业务层,保存角色以及权限
            roleService.insertRole(role);
            ajaxRes.setSuccess(true);
            ajaxRes.setMsg("创建角色成功");
        } catch (Exception e) {
            ajaxRes.setSuccess(false);
            ajaxRes.setMsg("创建角色失败,请重试!");
        }
        return ajaxRes;
    }

    /*更新角色*/
    @RequestMapping("/role/update")
    @ResponseBody
    public AjaxRes roleUpdate(Role role) {
        AjaxRes ajaxRes = new AjaxRes();
        try {
            // 调用业务层,保存角色以及权限
            roleService.updateRole(role);
            ajaxRes.setSuccess(true);
            ajaxRes.setMsg("更新角色成功");
        } catch (Exception e) {
            ajaxRes.setSuccess(false);
            ajaxRes.setMsg("更新角色失败,请重试!");
        }
        return ajaxRes;
    }

    /*删除角色*/
    @RequestMapping("/role/delete")
    @ResponseBody
    public AjaxRes roleDelete(Integer id) {
        AjaxRes ajaxRes = new AjaxRes();
        try {
            // 调用业务层,删除角色以及权限
            roleService.deleteRole(id);
            ajaxRes.setSuccess(true);
            ajaxRes.setMsg("删除角色成功");
        } catch (Exception e) {
            ajaxRes.setSuccess(false);
            ajaxRes.setMsg("删除角色失败,请重试!");
        }
        return ajaxRes;
    }

    /*获取角色列表 */
    @RequestMapping("/role/list/all")
    @ResponseBody
    public List<Role> roleAllList() {
        /*调用业务层直接查询*/
        return roleService.getAllRoles();
    }
}

service

// 接口层
package com.yang.service;

import com.yang.domain.PageListRes;
import com.yang.domain.QueryVo;
import com.yang.domain.Role;

import java.util.List;

/**
 * role的service层
 */
public interface RoleService {
    /*获取角色列表, 分页*/
    PageListRes getRoles(QueryVo queryVo);

    /*增加角色*/
    void insertRole(Role role);

    /*更新角色*/
    void updateRole(Role role);

    /*删除角色以及权限*/
    void deleteRole(Integer id);

    /*获取角色列表*/
    List<Role> getAllRoles();
}
// 实现类
package com.yang.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.yang.domain.PageListRes;
import com.yang.domain.Permission;
import com.yang.domain.QueryVo;
import com.yang.domain.Role;
import com.yang.mapper.RoleMapper;
import com.yang.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class RoleServiceImpl implements RoleService {

    /*注入mapper*/
    @Autowired
    private RoleMapper roleMapper;

    /*获取角色列表, 分页*/
    @Override
    public PageListRes getRoles(QueryVo queryVo) {
        /*调用分页*/
        Page<Object> page = PageHelper.startPage(queryVo.getPage(), queryVo.getRows());
        /*调用mapper查询*/
        List<Role> roleList = roleMapper.selectAll();
        /*封装成返回结果*/
        PageListRes pageListRes = new PageListRes();
        pageListRes.setTotal(page.getTotal());
        pageListRes.setRows(roleList);
        return pageListRes;
    }

    /*增加角色*/
    @Override
    public void insertRole(Role role) {
        // 保存角色
        roleMapper.insert(role);
        // 保存权限
        for (Permission permission : role.getPermissions()) {
            roleMapper.insertRoleAndPermissionRel(role.getId(), permission.getId());
        }
    }

    /*更新角色*/
    @Override
    public void updateRole(Role role) {
        // 删除该角色所有的权限
        roleMapper.deletePermissionRelByRoleId(role.getId());
        // 更新角色
        roleMapper.updateByPrimaryKey(role);
        // 保存现有权限
        for (Permission permission : role.getPermissions()) {
            roleMapper.insertRoleAndPermissionRel(role.getId(), permission.getId());
        }
    }

    /*删除角色以及权限*/
    @Override
    public void deleteRole(Integer id) {

        // 删除权限
        roleMapper.deletePermissionRelByRoleId(id);
        // 删除角色
        roleMapper.deleteByPrimaryKey(id);
    }

    /*获取角色列表*/
    @Override
    public List<Role> getAllRoles() {
        return roleMapper.selectAll();
    }
}

dao层(mapper)

package com.yang.mapper;

import com.yang.domain.Role;
import org.apache.ibatis.annotations.Param;

import java.util.List;
// mapper的接口类
public interface RoleMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Role record);

    Role selectByPrimaryKey(Integer id);

    List<Role> selectAll();

    int updateByPrimaryKey(Role record);

    /*插入角色与权限关系表*/
    void insertRoleAndPermissionRel(@Param("role_id") Integer role_id, @Param("permission_id") Integer permission_id);

    /*根据role_id删除*/
    void deletePermissionRelByRoleId(Integer id);
}

mapper的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yang.mapper.RoleMapper">
    <resultMap id="BaseResultMap" type="com.yang.domain.Role">
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="number" jdbcType="VARCHAR" property="number"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
    </resultMap>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from role
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <delete id="deletePermissionRelByRoleId">
      delete from `role_permission_rel` where role_id = #{id}
  </delete>
  <insert id="insert" parameterType="com.yang.domain.Role" useGeneratedKeys="true" keyProperty="id">
    insert into role (id, number, name)
    values (#{id,jdbcType=INTEGER}, #{number,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR})
  </insert>
<!--  增加角色与权限关系表-->
    <insert id="insertRoleAndPermissionRel">
      insert into `role_permission_rel`(role_id, permission_id) values (#{role_id}, #{permission_id})
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yang.domain.Role">
    update role
    set number = #{number,jdbcType=VARCHAR},
      name = #{name,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>
    <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select id, number, name
    from role
    where id = #{id,jdbcType=INTEGER}
  </select>
    <select id="selectAll" resultMap="BaseResultMap">
    select id, number, name
    from role
  </select>
</mapper>

permission与role的类似,不再展示,到这里就弯沉给我们的权限的增删改查

原文地址:https://www.cnblogs.com/yangshixiong/p/12286956.html

时间: 2024-11-07 02:45:16

spring项目篇4----编写角色与权限的相关文章

spring项目篇14 --- 编写商品展示以及购物车信息

肺炎形势严峻,人心惶惶,愿祖国早日解决,社会早点稳定. 这次主要实现的功能就是商品展示以及购物车,购物车信息保存在mysql数据库中.我们先来看商品数据库层 // IProductDao package com.yang.dao; import com.yang.domain.Product; import java.util.List; public interface IProductDao { // 获取商品 List<Product> getList(); // 获取单个商品 Prod

spring项目篇2----编写配置文件

我们接下来开始编写我们的权限系统,以便进一步熟悉SSM,接下来按照第一篇起一个maven项目,项目简介如下,接下来看一下配置文件 web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app xmlns="http:/

spring项目篇12---网上商城之配置以及工具类的编写

这个项目用到jdbc技术,研究了一下,为了学习一下,对于执行sql语句,自己进行封装工具类来进行处理,这样便于进一步理解. 首先我们来看一下搭建的基本项目结构 我们接下来看一下相关的配置信息: 首先看一下web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="

spring项目篇5----shiro以及实现登陆认证

接下来做一下,用户的认证登陆以及权限验证,在这里使用shiro,首先来看一下shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序. 主要功能 三个核心组件:Subject, SecurityManager 和 Realms. Subject:即“当前操作用户”.但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是

spring项目篇13 --- 网上商城之登陆注册

首先我们这次使用的是jwt来实现的登陆认证,首先看一下需要引入的jar包 尤其是commons-codec这个包,一定要引入,否则会报binary那个包的错误,因为找不到方法,另外不要使用那个结尾是20... 就是那个最新的这个包,会出错,找了好半天这个错误... 首先说一下基本思想,就是通过拦截器将我们的login以及rgister与静态文件放行,其余的检测是否携带token,并对token进行检测,合格之后在进行放行. 接下来直接看源码 首先看一下我们的spring配置补充的,因为没有使用r

spring项目篇15 --- 商城小项目创建订单以及查看所有订单

深圳肺炎患者突破80了,现在心里慌慌的,不知什么时候返深啊...既来之,则安之! 今天,这个简单的小项目最后一步,创建订单以及查看所有订单状态,我们的订单只需要点击一下付款即可完成支付,没有接入第三方支付.下面计划开始学习mybatis. 因为大多是业务代码,我们直接看就可以 先看dao层,在创建订单的时候,因为设计多表操作,因此需要开启事务 // IOrderDao package com.yang.dao; import com.yang.domain.Car; import com.yan

spring项目篇3----编写用户展示模块

第一步创建两张数据库表 员工表: 部门表: 第二步: 使用之前配置的mybatis-generator自动从数据库中生成pojo类与mapper映射文件 首先在配置文件中添加我们的表信息 <!--指定生成那个表--> <table tableName="employee" /> <table tableName="department" /> 之后点击运行 在java.com.yang.mapper包中的xml文件需要移动到res

角色及权限

引言(Introduction) 1.1. 关键词定义(Definitions) 有关定义说明如下: 安全管理:计算机技术安全管理的范围很广,可以包括网络安全性.数据安全性.操作系统安全性以及应用程序安全性等.很多方面的安全性管理大都已经有成熟的产品了,我们只需根据自己需要有选择性的使用就可达到自己的目的了.本文中有关关涉及"安全管理"一词均只针对本公司推出的应用中有关对象与数据而言范围有限. 主体:即可以象应用系统发出应用请求任何实体,包括各种用户.其它与本系统有接口的应用程序.非法

spring 入门篇

spring 入门篇 相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处使用”,它的优点有如下: 低侵入式设计,代码污染极低. 独立于各种应用服务,真正实现写一次到处都可以使用. 用户可选择的自由度高,用户可以选择部分或者是全部SPRING的功能,它并不是设计来取代其它框架,可以和其它的框架(如STRUTS.HIBERNATE)等结合极好. 面向接口的编程方式,使得代码的偶合度降到最低