常规权限系统的 结构
几个概念 租户层 或 平台层(最大的一层,下面的创建都得依赖它)
用户 (用户和角色间,有分配关系)
角色 (角色和客户端间,有分配关系)
客户端
接口/权限/资源(这里的接口权限,不代表只是接口,而是系统所有资源) (角色和接口权限件有授权分配关系, 切接口权限只 直接 分配授权给 角色)
从上面可以看出,一切以角色为核心,
客户端访问接口,是 客户端 <=> 角色 <=> 接口/权限
每个客户端 有一个 authentic token,客户端和角色之间 用 token联系,即客户端 token 角色 表 角色和接口权限,有角色 接口权限表 即通过 token 可以 找到 可以访问的接口权限 所以,只要是客户端 访问 接口,都得带上 token
所以,只要访问接口,必须最终得 带着角色信息去访问,客户端token最后也是角色,自己写接口 去访问,也是带着 @Permission(level = ResourceLevel.ORGANIZATION) 去访问,
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Permission {
String code() default "";
String[] roles() default {};
ResourceLevel level() default ResourceLevel.PROJECT;
boolean permissionLogin() default false;
boolean permissionPublic() default false;
boolean permissionWithin() default false;
boolean permissionSign() default false;
String[] tags() default {};
PermissionStatus[] status() default { PermissionStatus.NONE };
String upgradeApiPath() default "";
HttpMethod upgradeApiMethod() default HttpMethod.GET;
}
这个注解,就定义了 你访问的 角色是啥权限的
soga,访问 hezero权限平台控制的接口,必须得要角色
所以每个接口 上平台后,都得给 角色 分配 接口权限,但是Hzero,有些角色,是自动拥有,所有接口的权限的,底层有代码自动分配,而且有些客户端是绑定这些角色的,所以 你用这些客户端的token 和 这些角色 可以访问任何接口,不懂手动分配 接口权限
权限系统的 组织架构
用户 (员工和用户之间,互相分配)
员工 (员工和组织架构,相互分配) 组织架构 (组织架构,可以将组织,树形管理起来,然后组织下面,分配员工,这样完整的组织架构就出来了) 即 (用户 员工 组织架构) 表
工作流…
在组织架构下,都是以员工 为 基础来进行的,而不是用户,等于是,某个用户登入系统后 以某种员工的身份,来开启某个工作流
而且组织架构中人员的存在 也是 以员工为基础的,而不是系统用户,员工才是工作人员的身份,而用户只是系统的使用权
可以说用户 只是系统的使用权,而对于公司组织来说,是看以员工为基础的,登入系统需要用户登入,而业务记录,是员工
简单来说,用户是来 记录登入系统的(以公司人员来说),当然是客户系统的用户,可以 在业务里记录用户信息
角色 是来 对应权限的
组织是来管理 公司架构的
人员 是来记录 公司的业务信息的基础的
这4者创建时,或者所有层面(包括,组织层....)没有任何关系,都是相互分配关系后,就可以用从这几个层面,来共同 操作系统,一个层面是无法操作系统的
例如只有用户,没有角色,那么,你就无法获得任何权限,没有用户,那么你连系统都登不进去,所以 用户是必须有的,其他所有,层面都得跟用户建立联系,
但是在 具体某个操作时,我们只管 对应的层次 的功能,例如用户A登入,此时角色是B,B角色有操作 C接口的权限,那么在操作权限 这个角度,我们只考虑 角色B,而不是 用户A,在登入系统这个角度,我们只考虑用户A,而不是角色B,
员工分配用户和组织架构,不是说这个员工没有分配角色,没有访问接口的权限,不是这样的,这个员工,只是工作流中的一个数据信息,而执行工作流接口,得需要有这个 权限的角色 去执行
|