近期公司基于 若依 系统来做为中台系统的 安全中心模块 基础项目。
熟悉若依
@PreAuthorize("@ss.hasPermi('system:role:add')") 注解的含义
@PreAuthorize("@ss.hasPermi('system:role:add')") 是一个Spring Security中的注解,用于在方法级别进行权限控制。
这个注解的含义是:只有在用户拥有 "system:role:add" 权限时,才允许调用被注解的方法。它通过调用 "ss.hasPermi()" 方法来进行权限判断,其中 'system:role:add' 是一个权限表达式,表示用户需要具备 "system:role:add" 权限才能执行该方法。
在具体实现中,通常需要定义 "ss.hasPermi()" 方法来判断用户是否具备指定的权限。这个方法可以根据不同的业务需求进行自定义实现,常见的实现包括从数据库或缓存中查询用户的权限信息,并与传入的权限表达式进行匹配。
使用 @PreAuthorize 注解可以在方法执行之前进行权限验证,确保只有具备相应权限的用户才能访问受保护的方法。这有助于提高系统的安全性和数据访问控制。
请注意,具体的权限逻辑和实现方式可能因所使用的框架或权限管理系统而有所不同,上述说明仅为一般概念的解释,具体实现请参考适用于您的框架和工具的文档和示例。
@ApiOperation("新增角色")
@PreAuthorize("@ss.hasPermi('system:role:add')")
@Log(title = "角色管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysRole role)
{
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
{
return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
}
else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
{
return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
role.setCreateBy(getUsername());
return toAjax(roleService.insertRole(role));
}
| 方法 | 参数 | 描述 |
|---|---|---|
| hasPermi | String | 验证用户是否具备某权限 |
| lacksPermi | String | 验证用户是否不具备某权限,与 hasPermi逻辑相反 |
| hasAnyPermi | String | 验证用户是否具有以下任意一个权限 |
| hasRole | String | 判断用户是否拥有某个角色 |
| lacksRole | String | 验证用户是否不具备某角色,与 isRole逻辑相反 |
| hasAnyRoles | String | 验证用户是否具有以下任意一个角色,多个逗号分隔 |
进行的改造
部门列表添加用户数量
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
<if test="userId != null and userId != 0">
AND u.user_id = #{userId}
</if>
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d')
</if>
<if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
关于部门子查询
另外,我们可以为其添加 Cookie,将其与其它系统共用,进而打通系统。