权限树问题

来源:互联网 发布:lua 读取json配置文件 编辑:程序博客网 时间:2024/06/10 18:43


1.前台jsp

<body>
    <table id="role_tb">
    </table>

    <!-- 权限编辑窗口 -->
    <div id="win" class="easyui-window" title="权限编辑"
        style="width: 500px; height: 250px;" closed="true">
        <form style="padding: 10px 20px 10px 40px;">
            <ul id="tt" class="easyui-tree" url="../service/func/allTree" method="post"
                checkbox="true">
            </ul>
            <div style="padding: 5px; text-align: center;">
                <a href="#" class="easyui-linkbutton" icon="icon-ok" onclick="confrimEdit();">确定</a> <a
                    href="#" class="easyui-linkbutton" icon="icon-cancel" onclick="closeWin();">取消</a>
            </div>
        </form>
    </div>
    
    <!-- 角色用户编辑窗口 -->
    <div id="roleUserWin" class="easyui-window" title="编辑管理员"
        style="width: 500px; height: 250px;" closed="true">
        <table id="roleUser_tb" toolbar="#addBar">
        </table>
    </div>

    <!-- 角色用户编辑窗口工具栏 -->
    <div id="addBar" style="padding: 3px">
        <span>输入工号添加用户:</span> <input id="addUserId"
            style="line-height: 26px; border: 1px solid #ccc">  
        <a href="#" class="easyui-linkbutton" plain="true" onclick="addRoleUser()">点击添加至管理员</a>
    </div>



    <script type="text/JavaScript"
        src="<%=request.getContextPath()%>/js/admin/role.js"></script>
</body>


2.前台js

/**
 * 初始化界面
 */
var dataGrid;
var editRowId;
var rowEditor = undefined;
$(function() {
    dataGrid = $("#role_tb")
            .datagrid(
                    {
                        url : "../service/role/all",// 加载的URL
                        isField : "id",
                        method : "GET",
                        pagination : false,// 显示分页
                        fit : true,// 自动补全
                        fitColumns : true,
                        singleSelect : true,
                        iconCls : "icon-save",// 图标
                        columns : [ [ // 每个列具体内容
                                {
                                    field : 'id',
                                    title : '编号',
                                    align : 'center',
                                    width : 100,
                                },
                                {
                                    field : 'roleName',
                                    title : '角色名称',
                                    align : 'center',
                                    width : 100,
                                    editor : 'text'
                                },
                                {
                                    field : 'createTm',
                                    title : '创建时间',
                                    align : 'center',
                                    width : 100
                                },
                                {
                                    field : 'isDelete',
                                    title : '是否禁用',
                                    align : 'center',
                                    width : 100,
                                    editor : {
                                        type : 'checkbox',
                                        options : {
                                            on : '1',
                                            off : '0'
                                        }
                                    },
                                    formatter : function(value, row, index) {
                                        if (value == '0') {
                                            return '<span style="color:green">正常</span>';
                                        } else {
                                            return '<span style="color:red">禁用</span>';
                                        }
                                    }
                                },{
                                    field : 'action',
                                    title : '编辑权限',
                                    align : 'center',
                                    width : 100,
                                    formatter : function(value, row, index) {
                                            return "<a href='#' class='easyui-linkbutton' onclick='editRole("+row.id+")'>编辑权限</a>";
                                    }
                                },{
                                    field : 'roleUser',
                                    title : '查看管理员',
                                    align : 'center',
                                    width : 100,
                                    formatter : function(value, row, index) {
                                            return "<a href='#' class='easyui-linkbutton' onclick='editRoleUser("+row.id+")'>查看管理员</a>";
                                    }
                                } ] ],
                        toolbar : [ // 工具条
                                {
                                    text : "增加",
                                    iconCls : "icon-add",
                                    handler : function() {// 回调函数
                                        if (rowEditor == undefined) {
                                            dataGrid.datagrid('insertRow', {// 如果处于未被点击状态,在第一行开启编辑
                                                index : 0,
                                                row : {}
                                            });
                                            rowEditor = 0;
                                            dataGrid.datagrid('beginEdit',
                                                    rowEditor);// 没有这行,即使开启了也不编辑

                                        }

                                    }
                                },
                                {
                                    text : "删除",
                                    iconCls : "icon-remove",
                                    handler : function() {
                                        var rows = dataGrid
                                                .datagrid('getSelections');

                                        if (rows.length <= 0) {
                                            $.messager.alert('警告', '您没有选择',
                                                    'error');
                                        } else if (rows.length > 1) {
                                            $.messager.alert('警告', '不支持批量删除',
                                                    'error');
                                        } else {
                                            $.messager
                                                    .confirm(
                                                            '确定',
                                                            '您确定要删除吗',
                                                            function(t) {
                                                                if (t) {

                                                                    $.ajax({
                                                                                url : '../service/role/del',
                                                                                method : 'POST',
                                                                                data : rows[0],
                                                                                dataType : 'json',
                                                                                success : function(
                                                                                        r) {
                                                                                    if (r.code=="1") {
                                                                                        dataGrid
                                                                                                .datagrid('acceptChanges');
                                                                                        $.messager
                                                                                                .show({
                                                                                                    msg : r.msg,
                                                                                                    title : '成功'
                                                                                                });
                                                                                        editRow = undefined;
                                                                                        dataGrid
                                                                                                .datagrid('reload');
                                                                                    } else {
                                                                                        dataGrid
                                                                                                .datagrid(
                                                                                                        'beginEdit',
                                                                                                        editRow);
                                                                                        $.messager
                                                                                                .alert(
                                                                                                        '错误',
                                                                                                        r.msg,
                                                                                                        'error');
                                                                                    }
                                                                                    dataGrid
                                                                                            .datagrid('unselectAll');
                                                                                }
                                                                            });

                                                                }
                                                            })
                                        }

                                    }
                                },
                                {
                                    text : "修改",
                                    iconCls : "icon-edit",
                                    handler : function() {
                                        var rows = dataGrid
                                                .datagrid('getSelections');
                                        if (rows.length == 1) {
                                            if (rowEditor == undefined) {
                                                var index = dataGrid.datagrid(
                                                        'getRowIndex', rows[0]);
                                                rowEditor = index;
                                                dataGrid
                                                        .datagrid('unselectAll');
                                                dataGrid.datagrid('beginEdit',
                                                        index);

                                            }
                                        }
                                    }
                                },
                                /*{
                                    text : "查询",
                                    iconCls : "icon-search",
                                    handler : function() {
                                    }
                                },*/
                                {
                                    text : "保存",
                                    iconCls : "icon-save",
                                    handler : function() {
                                        dataGrid.datagrid('endEdit', rowEditor);
                                        rowEditor = undefined;
                                    }
                                }, {
                                    text : "取消编辑",
                                    iconCls : "icon-redo",
                                    handler : function() {
                                        rowEditor = undefined;
                                        dataGrid.datagrid('rejectChanges');
                                    }
                                } ],
                        onAfterEdit : function(rowIndex, rowData, changes) {
                            var inserted = dataGrid.datagrid('getChanges',
                                    'inserted');
                            var updated = dataGrid.datagrid('getChanges',
                                    'updated');
                            if (inserted.length < 1 && updated.length < 1) {
                                editRow = undefined;
                                dataGrid.datagrid('unselectAll');
                                return;
                            }

                            var url = '';
                            if (inserted.length > 0) {
                                url = '../service/role/add';
                            }
                            if (updated.length > 0) {
                                url = '../service/role/update';
                            }

                            $
                                    .ajax({
                                        url : url,
                                        method : "POST",
                                        data : rowData,
                                        dataType : 'json',
                                        success : function(r) {
                                            if (r.code=="1") {
                                                dataGrid
                                                        .datagrid('acceptChanges');
                                                $.messager.show({
                                                    msg : r.msg,
                                                    title : '成功'
                                                });
                                                editRow = undefined;
                                                dataGrid.datagrid('reload');
                                            } else {
                                                /* datagrid.datagrid('rejectChanges'); */
                                                dataGrid.datagrid('beginEdit',
                                                        editRow);
                                                $.messager.alert('错误', r.msg,
                                                        'error');
                                            }
                                            dataGrid.datagrid('unselectAll');
                                        }
                                    });

                        },
                        onDblClickCell : function(rowIndex, field, value) {
                            if (rowEditor == undefined) {
                                dataGrid.datagrid('beginEdit', rowIndex);
                                rowEditor = rowIndex;
                            }

                        }
                    });
});

function editRole(id){
    editRowId = id;
    //1.取消所有选择
    //var root = $('#tt').tree('getRoot');  
    //$("#tt").tree('uncheck',root.target);  
    //2.加载权限,动态选择
    var url = '../service/func/roleTree?roleId='+id;
    $.ajax({
        cache : true,
        type : "POST",
        url : url,
        async : false,
        success : function(data) {
            data = JSON.parse(data);
             $(data).each(function(i, obj){
                 var children = obj.children;
                 $(children).each(function(j,c_obj){
                     var cc = $("#tt").tree('find',c_obj.id);
                     if(cc){
                         $("#tt").tree('check',cc.target);
                     }
                 });
             });
        }
    });
    
    $("#win").window('open');
}


//获取选中节点和父节点
function getChecked(){
    var nodesParent = $('#tt').tree('getChecked','indeterminate');
    var nodes = $('#tt').tree('getChecked');
    var s = '';
    
    for (var i = 0; i < nodesParent.length; i++) {
        if (s != '') 
            s += ',';
        s += nodesParent[i].id;
    }
    for (var i = 0; i < nodes.length; i++) {
        if (s != '') 
            s += ',';
        s += nodes[i].id;
    }
   return s;
}


//提交修改
function confrimEdit(){
    var funIds = getChecked();
    var url = '../service/role/editFunc';
    var data = {
            "roleId" :editRowId,
            "funcIds":funIds
        };
    $.ajax({
        cache : true,
        type : "POST",
        url : url,
        data: data,
        async : true,
        success : function(data) {
            if (data == "1") {
                $.messager.show({
                    msg : "操作成功",
                    title : '成功'
                });
                closeWin();
            }else{
                $.messager
                .alert(
                        '错误',
                        "操作失败",
                        'error');
            }
        }
    });
}

//关闭窗口
function closeWin(){
     $('#tt').tree('reload'); 
     $("#win").window('close');
}


//打开编辑管理员窗口
function editRoleUser(roleId){
    editRowId = roleId;
    var roleUserGrid = $("#roleUser_tb").datagrid(
            {
                url : "../service/role/getUsers?roleId="+roleId,// 加载的URL
                isField : "user_id",
                method : "POST",
                pagination : false,// 显示分页
                fit : true,// 自动补全
                fitColumns : true,
                singleSelect : true,
                iconCls : "icon-save",// 图标
                columns : [ [ // 每个列具体内容
                        {
                            field : 'user_id',
                            title : '用户编号',
                            align : 'center',
                            width : 100,
                        },{
                            field : 'userName',
                            title : '姓名',
                            align : 'center',
                            width : 100,
                        },{
                            field : 'empNo',
                            title : '工号',
                            align : 'center',
                            width : 100,
                        }
                        ]]
            });
    $("#roleUserWin").window('open');
}

//输入工号添加用户至管理员
function addRoleUser(){
    var empNo = $("#addUserId").val();
    var url = '../service/role/addRoleUser';
    var data = {
            "roleId" :editRowId,
            "empNo":empNo
        };
    $.ajax({
        type : "POST",
        url : url,
        data: data,
        dataType:'json',
        success : function(data) {
            if (data.flg == "1") {
                $.messager.show({
                    msg : "操作成功",
                    title : '成功'
                });
                $("#roleUser_tb").datagrid('reload');
            }else{
                $.messager
                .alert(
                        '错误',
                        data.msg,
                        'error');
            }
        }
    });
}

3.后台controller

/**
 * 
 */
package com.sf.fys.controller.role;

import Java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.sf.fys.config.LogAppender;
import com.sf.fys.configs.Message;
import com.sf.fys.controller.BaseController;
import com.sf.fys.data.Res;
import com.sf.fys.model.Role;
import com.sf.fys.model.RoleUser;
import com.sf.fys.model.User;
import com.sf.fys.model.UserInfo;
import com.sf.fys.result.ResultResponse;
import com.sf.fys.result.ReturnCode;
import com.sf.fys.result.StringResult;
import com.sf.fys.service.role.RoleService;
import com.sf.fys.service.user.UserService;

/**
 * 角色权限管理
 * @author sfit0512
 * 
 */
@RestController
public class RoleController extends BaseController
{

    Logger log = Logger.getLogger(LogAppender.ADMIN);

    @Autowired
    private RoleService roleService;
    
    @Autowired
    private UserService userService;

    /**
     * 查询所有角色
     * @return
     */
    @RequestMapping(value = "/role/all", method = RequestMethod.GET)
    public List<Role> getRoles()
    {
        List<Role> list = new ArrayList<Role>();
        list = roleService.getRoles();
        return list;
    }

    /**
     * 添加角色
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/add", method = RequestMethod.POST)
    @ResponseBody
    public Res addRole(HttpServletRequest request, HttpServletResponse response)
        throws Exception
    {
        String roleName = request.getParameter("roleName");
        String isDelete = request.getParameter("isDelete");

        Role role = new Role(roleName, isDelete.charAt(0));

        int ret = roleService.addRole(role);

        if (ret > 0)
        {
            return success();
        }
        return fail();
    }

    /**
     * 修改角色
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/update", method = RequestMethod.POST)
    @ResponseBody
    public Res updateRole(HttpServletRequest request,
        HttpServletResponse response) throws Exception
    {
        String roleName = request.getParameter("roleName");
        String isDelete = request.getParameter("isDelete");
        String id = request.getParameter("id");

        Role role = new Role(roleName, isDelete.charAt(0));
        role.setId(Long.parseLong(id));

        int ret = roleService.updateRole(role);

        if (ret > 0)
        {
            return success();
        }
        return fail();
    }

    /**
     * 删除角色
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/del", method = RequestMethod.POST)
    @ResponseBody
    public Res deleteRole(HttpServletRequest request,
        HttpServletResponse response) throws Exception
    {
        String id = request.getParameter("id");
        int ret = roleService.delRole(Long.parseLong(id));

        if (ret > 0)
        {
            return success();
        }
        return fail();
    }

    /**
     * 编辑角色功能
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/editFunc", method = RequestMethod.POST)
    @ResponseBody
    public String editRoleFunction(HttpServletRequest request,
        HttpServletResponse response) throws Exception
    {
        String roleId = request.getParameter("roleId");
        String funcIds = request.getParameter("funcIds");
        if (funcIds != null && !"".equals(funcIds))
        {
            int ret = roleService.updateRoleFunc(Long.parseLong(roleId),
                funcIds);
            if (ret > 0)
            {
                return "1";
            }
        }
        return "0";
    }

    /**
     * 根据角色编号查询该角色的所有用户
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/getUsers", method = RequestMethod.POST)
    @ResponseBody
    public List<User> getUsersByRoleId(HttpServletRequest request,
        HttpServletResponse response) throws Exception
    {
        String roleId = getParameter(request, "roleId");
        log.info("getUsersByRoleId|roleId=" + roleId);
        List<User> list = roleService.getUsersByRoleId(Long.parseLong(roleId));
        return list;
    }

    /**
     * 给用户赋予角色
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/addRoleUser", method = RequestMethod.POST)
    @ResponseBody
    public ResultResponse addRoleUser(HttpServletRequest request,
        HttpServletResponse response) throws Exception
    {
        String roleId = getParameter(request, "roleId");
        String empNo = getParameter(request, "empNo");
        log.info("addRoleUser|roleId=" + roleId + "|empNo=" + empNo);
        
        List<UserInfo> list = userService.getUserByName("SF", empNo);
        if(list==null || list.get(0).getUserId()<=0){
            return new StringResult(ReturnCode.FAIL,Message.Error.USER_NOTE_EXITS, "");
        }
        
        long userId = list.get(0).getUserId();
        
        RoleUser roleUser = new RoleUser();
        roleUser.setRoleId(Long.parseLong(roleId));
        roleUser.setUserId(userId);
        int ret = roleService.addRoleUser(roleUser);
        if (ret > 0)
        {
            return new StringResult(ReturnCode.SUCCESS,
                ReturnCode.get(ReturnCode.SUCCESS), "");
        }
        else
        {
            return new StringResult(ReturnCode.FAIL,
                ReturnCode.get(ReturnCode.FAIL), "");
        }
    }

    /**
     * 删除用户角色
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/role/delRoleUser", method = RequestMethod.POST)
    @ResponseBody
    public ResultResponse delRoleUser(HttpServletRequest request,
        HttpServletResponse response) throws Exception
    {
        String roleId = getParameter(request, "roleId");
        String userId = getParameter(request, "userId");
        log.info("addRoleUser|roleId=" + roleId + "|userId=" + userId);
        RoleUser roleUser = new RoleUser();
        roleUser.setRoleId(Long.parseLong(roleId));
        roleUser.setUserId(Long.parseLong(userId));
        int ret = roleService.delRoleUser(roleUser);
        if (ret > 0)
        {
            return new StringResult(ReturnCode.SUCCESS,
                ReturnCode.get(ReturnCode.SUCCESS), "");
        }
        else
        {
            return new StringResult(ReturnCode.FAIL,
                ReturnCode.get(ReturnCode.FAIL), "");
        }
    }

}

4.后台service

@Service
public class RoleService {
    @Autowired
    private RoleMapper mapper;
    
    @Autowired
    private RoleUserMapper roleUserMapper;
    
    /**
     * 查询所有角色
     * @return
     */
    public List<Role> getRoles(){
        return mapper.getRoles();
    }
    
    /**
     * 添加角色
     * @param role
     * @return
     */
    public int addRole(Role role){
        return mapper.addRole(role);
    }

    /**
     * 修改角色
     * @param role
     * @return
     */
    public int updateRole(Role role){
        return mapper.updateRole(role);
    }
    
    /**
     * 删除角色
     * @return
     */
    public int delRole(long id){
        return mapper.delRole(id);
    }
    
    /**
     * 修改角色下的权限功能
     * @param roleId 角色编号
     * @param funcs 功能编号
     * @return
     */
    public int updateRoleFunc(long roleId,String funcs){
        //1.删除该角色所有功能
        mapper.deleteRoleFunc(roleId);
        
        //2.添加新功能
        int ret = 0;
        String[] funcList = funcs.split(",");
        for(String s:funcList){
            ret += mapper.addRoleFunc(roleId,Long.parseLong(s));
        }
        return ret;
    }
    
    /**
     * 根据角色编号查询该角色的所有用户
     * @param roleId
     * @return
     */
    public List<User> getUsersByRoleId(long roleId){
        return roleUserMapper.getUsersByRoleId(roleId);
    }
    
    /**
     * 给用户赋予角色
     * @param roleUser
     * @return
     */
    public int addRoleUser(RoleUser roleUser){
        return roleUserMapper.addRoleUser(roleUser);
    }
    
    /**
     * 取消用户角色
     * @param roleUser
     * @return
     */
    public int delRoleUser(RoleUser roleUser){
        return roleUserMapper.deleteRoleUser(roleUser);
    }

}

5.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.sf.fys.mapper.role.RoleUserMapper">

    <!-- 根据用户编号查询该用户拥有的角色 -->
    <select id="getRoleByUserId" resultType="com.sf.fys.model.RoleUser">
        select role_id as roleId,user_id as userId,create_tm
        as createTm from
        Role_User where user_id = #{userId,jdbcType=BIGINT}
    </select>

    <!-- 根据角色编号查询该角色下所有用户 -->
    <select id="getUsersByRoleId" resultType="com.sf.fys.model.User">
        select
        u.user_id,u.user_name as userName,u.emp_no as empNo from Role_User ru
        left join Users u on ru.user_id = u.user_id
        where ru.role_id = #{roleId,jdbcType=BIGINT}
    </select>

    <!-- 给用户赋予角色 -->
    <insert id="addRoleUser">
        insert into Role_User(role_id,user_id,create_tm)
        values(
        #{roleId,jdbcType=BIGINT},
        #{userId,jdbcType=BIGINT},
        now()
        )
    </insert>

    <!-- 删除用户角色 -->
    <delete id="deleteRoleUser">
        delete from Role_User where role_id =
        #{roleId,jdbcType=BIGINT} and user_id = #{userId,jdbcType=BIGINT}
    </delete>
</mapper>


0 0
原创粉丝点击