概述
用户登录
接受前端传来的用户名,密码,租户验证码,验证码。校验验证码,查看是否开启多租户功能。
然后就是校验账号和密码,判断传入账号和密码是否为空,空就异常,根据账号查询用户,不存在抛异常。账号存在,获取账号的passwordhashvalue值,将得到的密码解密,将解密后的密码进行hashvalue处理,然后进行判断。
登录,要查看状态不能为停用状态,然后构建登录用户信息(员工信息(构建登录用户时候没有查询附属机构id,职位id),首先会获取全部的菜单id,然后根据用户id和角色id,查询出自己的数据范围。角色信息,权限信息,应用信息,数据范围信息),然后使用JWT工具类构建token,将登录信息缓存在redis中,过期时间为两个小时。然后将用户登录的时间和地址进行更新。写入日志。设置SpringSecurityContext上下文(之后获取用户就很简单),判断是否单用户登录(获取redis中所有用户的登录信息,删掉账号名相同,但是登录用户的UUID和刚生成的不同的)。
默认app:首先判断自己拥有的菜单编码,查看是否有默认激活的应用(active=Y),将这个放在userAppDictlist的第一个,否则就按照获取菜单编码的第一个作为首个app0。
app和菜单的关系,先通过角色获取菜单代码集合,菜单中的application对应这app中的code。超级管理员只能获得系统权重菜单,不能获取业务权重菜单。
由用户id,菜单id集合和appcode获取该用户的菜单树。
用户退出
- 从request中获取到token,request中会将token进行封装,检验token,获取到payLoad中的信息UUID信息,判断redis中的uuid和生成的uuid是否相同。从redis中将key的信息进行删除。
新增:
如果不是自己所拥有的数据范围,则不能够添加该范围内的用户。首先会先给用户赋一个初始密码,然后查看用户是否设置密码,设置就覆盖掉HashValue,将手机号敏感加密使用SM4,然后保存用户信息。同时,把用户id,作为参数传给员工id,查看是否存在这个用户,没有就设置为null,然后将SysEmpParam中的参数copy给emp表,然后查看这个员工的附属机构,删除之前的附属机构,重新赋值,职位也是一样。
编辑:
和新增差不多,相当于新增了。新增时直接给了状态,编辑是先让状态为null,然后在更新状态。
删除
删除用户的时候,将用户信息中状态设置Delete,根据用户id删除员工信息表中的员工表(里边有机构),员工附属机构职位表,员工职位表信息,然后根据用户id,删除用户角色和数据范围。
授权角色
授权角色会先去查看角色权限,如果没有则不能授权,授权方式就是先删除之前的角色,然后重新赋值。
授权数据
授权数据会先去查看数据权限(就是说自己的机构是否包含想要赋值的机构),没有则不能赋值,授权方式也是先删除之前的数据范围,然后重新赋值。授权数据就相当于授权职位。
app:
激活功能:将激活的改为未激活,然后将想要激活的active改为Y。
构建树:
- 获取父节点(0L)
- 根据父节点获取子一级节点
- 然后根据子一级节点进行递归。
删除app时,应查看该app下是否有正常的菜单,有则不能删除。
菜单:
-
创建目录,校验传过来的参数。
-
重新设置pids,因为是目录所以pids=[0],
-
设置为启用状态
- 创建菜单,校验参数
- 从pid获取到pids,然后添加进去
- 设置启用
- 创建按钮,校验参数,包含:,
- 从pid获取到pids,然后添加进去
- 设置启用
删除就是级联删除,获取子节点所有的集合,然后设置为delete
修改的时候不能让自己选择自己,否则无限循环,也不能让自己成为父节点的父节点。
获取系统菜单树,根据application获得所在的菜单,然后构建树,供增加和修改时查看父节点。
切换菜单,获取角色id组合,由角色id组合得到菜单id集合,
员工
员工表包含员工id,机构id,机构name
机构表,包含pid和pids
职位表:职位id和name
员工职位表:员工id,职位id
员工附属机构职位表:员工id,机构id,职位id
删除机构时,判断是否有员工,
员工可以添加附属机构,
机构:
新增时,首先检验参数,不是管理员登录时,不能够添加父节点(0L),添加子节点时也要去数据权限校验(检验添加的节点是否在自己权限范围内)。
删除时,会先将所有的子节点放到list中,然后校验登录用户的数据区权限包不包括这些删除的节点。如果机构下有员工不能删,附属机构下有员工也不能删除。没有的话就级联删除信息。
修改的时候,首先校验登陆人的datascope是否包含操作的公司。检验参数。如果修改了别的地方的信息,去别的表中修改信息。然后将所有的子节点进行更新。
角色包含着菜单和数据。
用户被授权角色就可以有相应菜单和角色中包含的部分或全部数据
角色:
删除角色的时候,将状态改为2,然后删除该角色对应的数据范围(本人数据,自定义数据),删除用户角色中间表的信息,删除角色菜单表中数据
授权菜单时,首先应该删除原有的菜单-角色表中数据,然后新增。
授权数据范围时,如果授权为全部,没权限。如果是自定义,查看是否在自己权限范围内。授权数据时,也是先删除原有数据范围,然后赋新值。
角色也有自己的数据范围
职位
删除职位的时候,判断该职位和该员工附属职位下是否有员工,有则不能删除,要将员工-职位表中数据一并删除。
area
只有个查询方法。
consts
添加系统配置时,会将配置放到ConstantContext中,方便之后获取。
删除系统配置时,会去查看状态是否为Y,不是就可以删除,然后删除对应的Context中内容。
修改时,不能修改状态,编辑过后,将新的内容放到context中。
timer,sms,oauth,notice,monitor,log,file,emp,email,dict,consts,area,
DictType
字典类型下有个字典,通过字典类型id获得字典值。
删除的时候会将字典类型下的字典也会删除。
字典树,获取字典类型,然后设置字典类型为pid=0,然后查找字典值,pid为字典类型的id。,然后经过doTreeBuild()。
DictData
一样。
email功能没成功好像是因为过滤问题。
file
使用的是@Resource,按照名字查找实例@Bean,能找到实例Bean的名字,然后就调用实例@Bean。
上传文件的流程:
- 生成id,获取文件名称,获取后缀,后缀不能为空,将三个加起来生成最后的名称。
- 将文件转化为byte[],通过storageFile()方法在指定位置创建文件
上传文件时候,获取的默认地址是在调用构造器的时候初始化了。
monitor
在线用户列表:从redis中获取key所对应的value。
强制退出:获取登录用户的id,然后清楚登录该用户的redis信息,加入退出日志。
Notice
已收:根据当前用户id去查询所有没有被删除的信息。
这里写自定义目录标题
- 用户登录
- 用户退出
- 新增:
- 编辑:
- 删除
- 授权角色
- 授权数据
- app:
- 菜单:
- 员工
- 机构:
- 角色:
- 职位
- area
- consts
- DictType
- DictData
- file
- monitor
- Notice
最后
以上就是勤奋心锁为你收集整理的snowy框架用户登录app:菜单:员工机构:角色:职位areaconstsDictTypeDictDataemailfilemonitorNotice的全部内容,希望文章能够帮你解决snowy框架用户登录app:菜单:员工机构:角色:职位areaconstsDictTypeDictDataemailfilemonitorNotice所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复