用户权限管理系统动态展示菜单列表
一、需求分析
功能需求分析
-
此次我们要实现用户权限管理系统动态展示菜单列表
- 动态展示:根据用户登录的角色身份的不同,进行动态的展示列表菜单
根据上述简单流程图,我们可以看出,用户在登陆时会进行一个权限校验,判断你的身份唯一标识(Admin/User),根据身份标识的不同,动态的展示菜单列表(用户管理、角色管理、菜单管理)
代码需求分析
-
要用代码实现上述功能需求分析
首先需要一个UserDTO这样的实体类
实体类需求:
- User基本登录的信息(用户名,密码)
- User角色的身份表示
- User的菜单列表
/**
* UserDTO用来接受前端登录时传递的用户名和密码
* @author 永不遗憾&象牙塔
*/
@Data
public class UserDTO {
private String username;
private String password;
/**昵称*/
private String nickname;
private String avatar;
private String token;
/**把当前登录用户的角色以及他的菜单项带出来*/
private String role;
private List<Menu> menus;
private Boolean flag;
private String msg;
}
二、代码实现
实体类
- User
/**
* @author 永不遗憾&象牙塔
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_user")
/**@Alias("User")*/
public class User implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private String username;
private String password;
private String nickname;
private String gender;
private String phone;
private String email;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 1代表有效
* 0代表无效
* */
private String state;
private String role;
}
- Menu
/**
* @author 永不遗憾&象牙塔
*/
@Data
@TableName(value = "sys_menu")
@ToString
public class Menu {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
/**访问路径*/
private String path;
/**图标*/
private String icon;
/** 描述*/
private String description;
/**在数据表中没有children这个字段,这个在做菜单的时候会用到,所以使用exist=false忽略*/
@TableField(exist = false)
private List<Menu> children;
private Integer pid;
/**这样处理的主要目的是java对带有下划线的字段不识别,所以改为驼峰形式*/
@TableField(value = "page_path")
private String pagePath;
}
- Role
/**
* @author 永不遗憾&象牙塔
*/
@Data
@TableName(value = "sys_role")
public class Role {
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
private String name;
private String description;
private String flag;
}
- RoleMenu
/**
* @author 永不遗憾&象牙塔
*/
@Data
@TableName(value = "sys_role_menu")
public class RoleMenu {
private Integer roleId;
private Integer menuId;
}
持久层
- Mapper
- MenuMapper
/**
* @author 永不遗憾&象牙塔
*/
public interface MenuMapper extends BaseMapper<Menu> {
/**根据角色唯一标识flag查找角色id*/
@Select("select id from sys_role where flag=#{flag}")
Integer selectByflag(@Param("flag") String role);
}
- RoleMapper
/**
* @author 永不遗憾&象牙塔
*/
public interface RoleMapper extends BaseMapper<Role> {
/**根据角色唯一标识flag查找角色id*/
@Select("select id from sys_role where flag=#{flag}")
Integer selectByflag(@Param("flag") String role);
}
- RoleMenuMapper
/**
* @author 永不遗憾&象牙塔
*/
public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
/**根据角色id删除角色菜单数据*/
@Delete("delete from sys_role_menu where role_id=#{roleId}")
int deleteByRoleId(@Param("roleId") Integer roleId);
/**根据角色id查找菜单id*/
@Select("select menu_Id from sys_role_menu where role_id=#{roleId}")
List<Integer> selectByRoleId(@Param("roleId") Integer</