若依非分离版-第五十八章:角色分配/密码重置前后端源码拆解

操作界面

1、密码重置

2、分配角色

密码重置代码实现

如下图代码路径:密码重置配置在table里面的操作封装函数。

{
    title: '操作',
    align: 'center',
    formatter: function(value, row, index) {
        if (row.userId != 1) {
           var actions = [];
         actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.userId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
         actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.userId + '\')"><i class="fa fa-remove"></i>删除</a> ');
         var more = [];
         more.push("<a class='btn btn-default btn-xs " + resetPwdFlag + "' href='javascript:void(0)' onclick='resetPwd(" + row.userId + ")'><i class='fa fa-key'></i>重置密码</a> ");
         more.push("<a class='btn btn-default btn-xs " + editFlag + "' href='javascript:void(0)' onclick='authRole(" + row.userId + ")'><i class='fa fa-check-square-o'></i>分配角色</a>");
         actions.push('<a tabindex="0" class="btn btn-info btn-xs" role="button" data-container="body" data-placement="left" data-toggle="popover" data-html="true" data-trigger="hover" data-content="' + more.join('') + '"><i class="fa fa-chevron-circle-right"></i>更多操作</a>');
         return actions.join('');
       } else {
            return "";
        }
    }
}]

如上述代码片段

第四行代码,传入row,该行的内容,index被选中的第几行

actions.push:将动作操作设置如数组。其中密码重置的点击事件是:

onclick='resetPwd(" + row.userId + ")' 其中row.userId:被选中的用户id。

具体密码重置执行方法如下

/* 用户管理-重置密码 */function resetPwd(userId) {    
    var url = prefix + '/resetPwd/' + userId;
    $.modal.open("重置密码", url, '800', '300');
}

第四行代码,$.modal.open窗口打开url连接,url执行请求java后端程序,代码如下:

@RequiresPermissions("system:user:resetPwd")
@GetMapping("/resetPwd/{userId}")
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
{
    mmap.put("user", userService.selectUserById(userId));    
    return prefix + "/resetPwd";
}

java代码逻辑:

1、@PathVariable("userId")在url路径中获取userId的字段。

2、
userService.selectUserById(userId):通过userid 获取用户对象。

3、将用户对象设置到ModelMap mmap里面。

4、返回resetPwd.html页面。

resetPwd.html页面目录如下截图:

显示效果对应的代码如下截图:其中登录昵称是从ModelMap对象获取,详细代码

<div class="col-sm-8">
   <input class="form-control" type="text" readonly="true" name="loginName" th:value="${user.loginName}"/>
</div>

th:value="${user.loginName}":从user对象获取登录昵称。

角色分配代码实现

角色分配前端点击绑定事件函数:

/* 用户管理-分配角色 */function authRole(userId) {    
    var url = prefix + '/authRole/' + userId;
    $.modal.openTab("用户分配角色", url);
}

1、新的窗口打开url地址

2、url地址请求java接口。

java接口代码如下:

/**
 * 进入授权角色页
 */
 @GetMapping("/authRole/{userId}")
 public String authRole(@PathVariable("userId") Long userId, ModelMap mmap)
{
    SysUser user = userService.selectUserById(userId);    // 获取用户所属的角色列表
    List<SysRole> roles = roleService.selectRolesByUserId(userId);
    mmap.put("user", user);
    mmap.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));    
    return prefix + "/authRole";
}

业务逻辑:

1、从url路径中获取userId,具体代码是@PathVariable("userId") Long userId。

2、从上述第7行,根据用户id获取用户对象。

3、从上述第9行,根据用户id,获取用户所属的角色列表

4、将角色和用户对象,保存在mmap里面

5、返回authRole.html

如上图,java后台传回来的mmap.put("roles",数据,复制到roles的变量,这个变量在传入table。由table组件进行显示。

var roles = [[${roles}]]

用户昵称信息显示通过th:value="${user.userName}"读取实现。

html角色提交函数

/* 添加角色-提交 */
     function submitHandler(index, layero){         
         var roleIds = [];       
         var data = $('#bootstrap-table').bootstrapTable('getData');       
         for (var i = 0; i < data.length; i++) {          
             if (data[i][0] || ($.common.isEmpty(data[i][0]) && data[i].flag)) {
              roleIds.push(data[i].roleId)
          }
}
       $.operate.saveTab(prefix + "/insertAuthRole", { "userId": $("#userId").val(), "roleIds": roleIds.join() });
     }

java后台处理函数

/**
 * 用户授权角色
 */
 @RequiresPermissions("system:user:edit")
 @Log(title = "用户管理", businessType = BusinessType.GRANT)
 @PostMapping("/authRole/insertAuthRole")@ResponseBodypublic AjaxResult insertAuthRole(Long userId, Long[] roleIds)
{    
    userService.checkUserDataScope(userId);    
    userService.insertUserAuth(userId, roleIds);    
    AuthorizationUtils.clearAllCachedAuthorizationInfo();    
    return success();
}

业务逻辑:

1、检查用户是否有角色权限。

2、插入角色权限。

3、清理缓存信息。

未来计划

1、ruoyi非分离版本拆解

2、ruoyi-vue-pro:讲解工作流

3、ruoyi-vue-pro:支付模块,电商模块

4、基于ruoyi-vue-pro项目开发

5、JEECG低代码开发平台

请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。

来源: 互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。

赞 ()

相关推荐

发表回复

评论列表

点击查看更多

    联系我们

    在线咨询: QQ交谈

    微信:13450247865

    邮件:451255340#qq.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    微信