功能表
//系统功能
bean SystemFunctionEntity{
Integer id;
// @ 此处不能添加字段注解,影响项目启动
String name length 20; //功能名
String module length 20; //所属模块
String url length 256; // URL
Integer origin = 0; // 来源 是程序扫描到的还是手动添加 未启用 现在不能手动添加
@Min(0)
@Max(1)
Integer enabled = 1 length 1 notnull; //是否有效
@Min(0)
@Max(1)
Integer isCommon = 0 length 1 notnull; //是否是通用模块(通用模块不需要权限控制)
}
- eap系统所有的请求都会经过spring security 的拦截 判断一个人是否有权限访问 就是确认这个人是否有权限访问这个请求的url
- 系统启动的时候 会根据配置信息
eap.function.reload
的值 (默认是true) 决定是否刷新表里的数据. 否则不刷. - 如果配置要刷 会把项目中所有存在的标注有@RequestMapping注解的方法对应的url 都查询到 与现有库里的情况逐条比对
- 如果此时是
eap.dev=true
开发模式,会将表里没有的url 添加 如果不是开发模式 还会将表里多余的url 设置为无效.
功能就是资源点
角色表
//角色实体
bean SystemRoleEntity{
Integer id;
@Size(min=3,max=20,message="请输入3-20位长度的角色名")
@Column(name = "name",unique = true)
String name length 20 notnull;//角色名
@Min(0)
@Max(1)
Integer enabled = 1 length 1 notnull; //是否有效
String memo length 500; //备注
Date createdDate = new Date();//创建日期
String loginId length 30 notnull; //创建人工号
@OneToMany(mappedBy="role",fetch =FetchType.EAGER)
List<SystemRoleFunction> roleFunction;
}
角色就是对功能的集合 比如定义一个角色 他包含5个url
菜单表
//系统菜单
bean SystemMenuEntity{
Integer id;
@Size(min = 2, max = 20,message="请输入2-20位长度的字符!")
@Column(name = "name",unique = true)
String name length 20 notnull; //菜单名
@Min(0)
@Max(1)
Integer enabled = 1 length 1 notnull ;//是否有效
@ManyToOne
@JoinColumn(name="parent_id")
@JsonIgnore
SystemMenuEntity parentMenu;
@OneToOne
@JoinColumn(name="function_id")
SystemFunctionEntity function; //关联的系统功能
@OneToMany(mappedBy="parentMenu",fetch =FetchType.EAGER)
List<SystemMenuEntity> subMenus;
//排序项
Integer ord;
String icon;
//打开方式
Integer openType;
}
菜单跟功能是一对一的 一个菜单代表一个功能
员工表
// 员工表
bean SystemStaffEntity{
Integer id;
@Size(min=1,max=30,message="请输入1-30位长度的工号")
@Column(name = "login_id",unique = true)
String loginId notnull ; //工号 (登陆系统时用)
@Size(min=1,max=30,message="请输入1-30位长度的姓名")
String name length 30 notnull; // 员工姓名
// @Size(min=11,max=11,message="请输入11位手机号")
String telNum length 20; //电话号码
// @Pattern(regexp = "^[A-Z0-9a-z]+([-_.][A-Z0-9a-z]+)*@([A-Z0-9a-z]+[-.])+[A-Z0-9a-z]+$",message="邮箱地址格式不正确!")
@Email
String email length 50;// E-Mail
@Min(0)
@Max(2)
Integer status = 1 length 1; //员工状态 0:离职 1:正式 2:试用
Date employTime = new Date(); //入职日期
String password = "000000" length 30; // 登陆密码
Date passwordChgDate; // 密码修改时间
@Min(0)
@Max(1)
Integer sex length 1 notnull; //性别
@ManyToOne
SystemDepartmentEntity department; //员工所在部门
Integer createdStaff length 10 notnull;// 创建人
Date createdDate = new Date();//创建时间
@OneToMany(mappedBy="staff",fetch =FetchType.EAGER)
List<SystemRoleStaff> roleStaff;
@JsonIgnore
Integer loginErrorNum=0 length 2;//错误登录次数
@JsonIgnore
Timestamp lastErrorTime;//最后一次登录失败时间
//扩展字段
String ext1;
String ext2;
String ext3;
}
员工拥有多个角色 比如系统管理员 只读管理员
其他还有部门表 参数表参数项表 任务表 异常日志表 操作日志表
判断一个人是否有权限
还是以流程图说明
用户请求/a.sp
↓
判断用户是否已登录 未登录则重定向进行登录
↓
查询该用户拥有的所有角色对应的所有功能并去重(包含公共的功能)
↓
查询a.sp 是否在拥有的功能集合中
↓
如果在 则有权限 放行 不在 返回403