Table of Contents |
---|
介绍
authorizer
IAuthorizer
接口提供了所有与授权相关的操作,例如登录、创建用户、给用户赋予权限等操作
BasicAuthorizer
实现了IAuthorizer
接口,当进行权限操作时,通过userManager
或roleManager
调用其对应类的权限操作方法。
role
IRoleManager
接口维护了与角色权限相关的操作(创建、删除角色等)
BasicRoleManager
实现了IRoleManager
接口,此类通过 LocalFileRoleAccessor
从本地文件中读取角色,并在哈希映射中对其进行管理。
IRoleAccessor
接口管理角色对象的序列化反序列化。
LocalFileRoleAccessor
该类对存储在本地data/system/roles下的相关角色信息进行操作
user
IUserManager
接口维护了与用户权限相关的操作(创建、删除用户等)
BasicUserManager
实现了IUserManager
接口,此类将每个用户的信息存储在目录内的单独文件中,并在访问用户时将它们缓存在内存中。
IUserAccessor
该接口管理用户对象的序列化反序列化
LocalFileUserAccessor
该类对存储在本地data/system/users下的相关用户信息进行操作
登陆
启动服务器,通过启动脚本
start-cli.sh
来发起一个请求,并由服务器端接收,申请开启一次会话。创建一个
BasicOpenSessionResp
对象,用来存储登录是否成功的状态信息,获取一个BasicAuthorizer
的实例对象,调用login()
方法传递username
和password
。首先通过用户名获取用户。如果用户名和密码都不为空,就验证从客户端传递过来的密码与通过用户名得到的密码是否相同。
获取用户:通过
username
在userMap
中获取用户,如果用户为空,就检查本地有没有该用户,如果本地目录下有用户信息,就把用户信息放入userMap
中;如果在usermMap
中存在该用户,就设置用户的lastActiveTime
为当前时间。
根据返回结果来为
BasicOpenSessionResp
对象设置对应的成功或失败,sessionId
等信息。最后返回openSessionResp
对象。
操作
创建用户
首先获取对应的sql语句,生成物理计划
为非查询计划,执行
executeNonQuery()
执行
processNonQuery()
,进行下一步操作根据计划类型,选择对应的操作
createUser()
,并传递username
和password
创建用户,如果返回false,就证明用户已经被创建,抛出异常
验证用户名和密码是否符合规范
根据用户名先获取用户,如果用户存在,就不可以再继续创建用户
如果获取的用户为空,根据用户名和密码创建一个新的
User
对象将用户保存,写入本地的data/system/users/目录下,生成对应用户的profile文件。
放入
userMap
创建角色
与创建用户相似,可做参考。
更新用户密码
新密码不可以小于4位,不可以包含空格
通过用户民获取用户
在更新的过程中,先保存用户原来的密码,防止在更新密码时,出现错误,可以将旧的密码赋值回去。
用户密码更新成功后,保存在本地
删除用户
如果删除的是
root
默认用户,抛出异常。如果删除的用户存在,就删除本地
data/system/
下保存的相关用户信息,并在userMap
中移除该用户。
删除角色
删除本地存储的角色信息,在
roleMap
中移除角色信息如果删除成功,就遍历所有的用户,将该角色从所有的用户中移除。
赋予用户权限
如果是赋予
root
用户权限,就会抛出异常,因为root
用户拥有所有的权限检查该权限是否需要
seriesPath
作为参数,如果不需要权限的路径,则会将newPath
设置为root
赋予用户权限
验证该路径上的权限是否合法
通过用户名获取用户
遍历用户的权限列表,如果用户已经有权限,则返回
false
为用户加入权限
创建一个
PathPrivilege
对象,将privilegeId
赋值给它在这个用户的
privilegeList
里加入刚创建的PathPrivilege
对象
保存在本地
赋予角色权限
与赋予用户权限相似,可参考赋予用户权限
赋予用户角色
根据角色名获取到角色
为用户赋予角色
根据用户名获取用户
检查用户是否有该角色
为用户的
roleList
添加这个角色保存在本地
赋予成功,再次根据角色名获取角色,检查是否为空,防止角色在赋予用户之前被删除
撤销用户角色
根据角色名获取对应的角色
移除用户角色
根据用户名获取对应的用户
检查用户是否包含该角色
将用户的
roleList
的对应角色移除掉保存在本地
撤销用户权限
检查是否为
root
用户检查该权限是否需要
seriesPath
作为参数,如果不需要,则将路径设置为root
撤销用户的权限
验证该路径上的权限是否合法
根据用户名获取用户
如果这个用户没有这个权限,则返回
false
移除用户的权限
创建一个空的
PathPrivilege
对象emptyPrivilege
遍历用户的
privilegeList
遍历到要移除权限的'
path
,将对应的权限进行移除如果移除权限后,
pathPrivilege
为空,说明该路径上不包含任何的权限,将pathPrivilege
赋值给emptyPrivilege
。如果
emptyPrivilege
不为空,则在这个用户的privilegeList
里移除对应的emptyPrivilege
保存在本地
撤销角色权限
与撤销用户权限相似,可参考插销用户权限
列出用户
检查当前用户是否被授予 list_user 权限
查询所有用户
获取用户在本地的路径
data/system/users
获取对应本地该路径下所有的用户文件名,组成一个数组
创建
Set
集合set
,遍历数组,将该文件名的后缀去除,并将去除后的名字放入set
将得到的
set
放入列表中,返回结果
将列表排序
查询所有角色
与查询所有用户相似,参考查询所有用户
列出用户角色
根据用户名获取用户
遍历用户的
roleList
,将得到的结果放进结果集返回
列出角色用户
根据角色名获取用户
获取所有的用户
遍历
userList
,如果用户不为空,且用户拥有该角色,将该对应的该用户名,放入结果集循环完毕后,返回结果集
列出用户权限
根据用户名获取用户
创建对应的结果集头
遍历该用户的
privilegeList
如果
path
不为空,且它的全路径属于对应用户权限中的路径,创建对应的record
,放入结果集中
遍历用户的
roleList
,通过对应的角色名获取对应的角色,并将角色的privilegeList
进行遍历如果
path
不为空,且它的全路径属于对应角色权限中的路径,创建对应的record
,放入结果集中
返回结果集
列出角色权限
首先根据角色名获取对应的角色
将角色的
privilegeList
进行遍历,如果path
不为空,且它的全路径属于对应角色权限中的路径,创建对应的record
,放入结果集中返回结果集