专栏首页复盘总结文章集合【JeeSite】角色和权限的修改(二次开发代码解析)

【JeeSite】角色和权限的修改(二次开发代码解析)

@RequiresPermissions("sys:role:edit")
    @RequestMapping(value = "save")
    public String save(Role role, Model model, RedirectAttributes redirectAttributes) {
        if(!UserUtils.getUser().isAdmin()&&role.getSysData().equals(Global.YES)){
            addMessage(redirectAttributes, "越权操作,只有超级管理员才能修改此数据!");
            return "redirect:" + adminPath + "/sys/role/?repage";
        }
        if(Global.isDemoMode()){
            addMessage(redirectAttributes, "演示模式,不允许操作!");
            return "redirect:" + adminPath + "/sys/role/?repage";
        }
        if (!beanValidator(model, role)){
            return form(role, model);
        }
        if (!"true".equals(checkName(role.getOldName(), role.getName()))){
            addMessage(model, "保存角色'" + role.getName() + "'失败, 角色名已存在");
            return form(role, model);
        }
        if (!"true".equals(checkEnname(role.getOldEnname(), role.getEnname()))){
            addMessage(model, "保存角色'" + role.getName() + "'失败, 英文名已存在");
            return form(role, model);
        }
        systemService.saveRole(role);
        addMessage(redirectAttributes, "保存角色'" + role.getName() + "'成功");
        return "redirect:" + adminPath + "/sys/role/?repage";
    }


========================================


@Transactional(readOnly = false)
    public void saveRole(Role role) {
        if (StringUtils.isBlank(role.getId())){
            role.preInsert();
            roleDao.insert(role);
            // 同步到Activiti
            saveActivitiGroup(role);
        }else{
            role.preUpdate();
            roleDao.update(role);
        }
        // 更新角色与菜单关联
        roleDao.deleteRoleMenu(role);
        if (role.getMenuList().size() > 0){
            roleDao.insertRoleMenu(role);
        }
        // 更新角色与部门关联
        roleDao.deleteRoleOffice(role);
        if (role.getOfficeList().size() > 0){
            roleDao.insertRoleOffice(role);
        }
        // 同步到Activiti
        saveActivitiGroup(role);
        // 清除用户角色缓存
        UserUtils.removeCache(UserUtils.CACHE_ROLE_LIST);
//        // 清除权限缓存
//        systemRealm.clearAllCachedAuthorizationInfo();
    }

========================================

页面传参数menuIds , 数据库保存用的参数是menuList, 中间通过setMenuIds--->setMenuIdList---->menuList

public List<String> getMenuIdList() {
        List<String> menuIdList = Lists.newArrayList();
        for (Menu menu : menuList) {
            menuIdList.add(menu.getId());
        }
        return menuIdList;
    }

    public void setMenuIdList(List<String> menuIdList) {
        menuList = Lists.newArrayList();
        for (String menuId : menuIdList) {
            Menu menu = new Menu();
            menu.setId(menuId);
            menuList.add(menu);
        }
    }

    public String getMenuIds() {
        return StringUtils.join(getMenuIdList(), ",");
    }
    
    public void setMenuIds(String menuIds) {
        menuList = Lists.newArrayList();
        if (menuIds != null){
            String[] ids = StringUtils.split(menuIds, ",");
            setMenuIdList(Lists.newArrayList(ids));
        }
    }

role.java

只贴出保存权限的,角色的省略,sql语句有点变态,很长很长,这里只是对生成的sql语句截取部分

INSERT INTO sys_role_menu(role_id, menu_id) SELECT #{id}, #{menu.id} FROM dual

==========================================

INSERT INTO sys_role_menu(role_id, menu_id) SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual union all SELECT ?, ? FROM dual

节点的值在保存提交的时候存在这里,

submitHandler: function(form){ var ids = [], nodes = tree.getCheckedNodes(true); for(var i=0; i<nodes.length; i++) { ids.push(nodes[i].id); } $("#menuIds").val(ids); var ids2 = [], nodes2 = tree2.getCheckedNodes(true); for(var i=0; i<nodes2.length; i++) { ids2.push(nodes2[i].id); } $("#officeIds").val(ids2); loading('正在提交,请稍等…'); form.submit(); },

有个地方注意一点,在roleDao.xml 的get 方法中,column="officeList.id" , 因为后面命名了 ro.office_id AS "officeList.id":

form:select 标签挺好用的,还带搜索筛选功能

form:select path="roleType" class="input-medium">
                    <form:option value="assignment">任务分配</form:option>
                    <form:option value="security-role">管理角色</form:option>
                    <form:option value="user">普通角色</form:option>
                </form:select>

任务分配 管理角色 普通角色

用户名重复校验的比较简洁好用。自己用ajax异步请求也行,但是写的代码会比较多。

$("#inputForm").validate({ rules: { name: {remote: "${ctx}/sys/role/checkName?oldName=" + encodeURIComponent("${role.name}")}, enname: {remote: "${ctx}/sys/role/checkEnname?oldEnname=" + encodeURIComponent("${role.enname}")} }, messages: { name: {remote: "角色名已存在"}, enname: {remote: "英文名已存在"} },

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解Java8 Lambda表达式

    匿名函数的应用场景是: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用Lambda表达式。lambda表达式所表示的匿名函数的内容应该是很简单...

    ZhangXianSheng
  • SpringBoot注解最全详解[转]

    @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:

    ZhangXianSheng
  • Java代码优化总结(长期更新)

    2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的:

    ZhangXianSheng
  • Django 进阶学习 - 动态actions

    Django后台默认只有一个动作Delete selected xxxxs, 那么如果自定义动作该怎么办, 也很容易, 直接写个类似于这种的函数

    用户1416054
  • HBase Thrift with Python

    本文内容是基于 Centos 7、HDP 3.0.0、HBase 2.0.0、Python 2.7 环境下,其他环境的童鞋选择性进行参考。

    迹_Jason
  • 基于 Laravel Prequel 扩展包通过 Web 界面管理 MySQL 数据库

    Laravel Prequel 是一个数据库管理工具,可以在某个 Laravel 项目中安装该扩展包,从而实现对数据库的在线管理,这样一来就可以通过它替代掉那些...

    猿哥
  • 8-用算符(中)

    四、sizeof sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。 int size = sizeof(10); printf...

    Python知识大全
  • linux shell实现随机数多种方法(date,random,uuid)

    在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的不简单了。现在很...

    明哥的运维笔记
  • Java JDBC简介

    JDBC技术就是Java Database Connectivity技术,也就是连接数据库的技术

    用户2965768
  • 开源数据库在平安的应用实践

    2019年5月9日,平安科技数据库产品及存储产品部总经理在第十届数据库技术大会DTCC上分享了《开源数据库在平安的应用实践》,本文根据演讲内容整理,围绕以下几个...

    数据和云

扫码关注云+社区

领取腾讯云代金券