权限平台的设计关系

常规权限系统的 结构

权限框架用的SPringSecurity,表结构在 Hzero数据库里面,用户,角色,客户端,权限,登入后,查询用户的role拥有的权限,判断是否具有接口权限
几个概念
租户层 或 平台层
租户
(这两个概念的对比我还不清楚)
(下面都是 以 租户 而不是 租户层)

用户
(用户和角色间,有分配关系)

角色 (新建角色 的时候 有角色 是 什么层的)
(角色和客户端间,有分配关系)

客户端

接口/权限/资源(这里的接口权限,不代表只是接口,而是系统所有资源)
(角色和接口权限件有授权分配关系,
切接口权限只 直接 分配授权给 角色)

从上面可以看出,一切以角色为核心,

客户端访问接口,是 客户端 <=> 角色 <=> 接口/权限

每个客户端 有一个 authentic token,客户端和角色之间 用 token联系,即客户端 token 角色 表
角色和接口权限,有角色 接口权限表
即通过 token 可以 找到 可以访问的接口权限
所以,只要是客户端 访问 接口,都得带上 token

所以,只要访问接口,必须最终得 带着角色信息去访问,客户端token最后也是角色,自己写接口 去访问,也是带着 @Permission(level = ResourceLevel.ORGANIZATION) 去访问,

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Permission {

    /**
     * API编码,默认为 {@link Api#tags()} + 方法名 组成 API编码
     *
     * @return 权限编码
     */
    String code() default "";

    /**
     * 角色
     * 
     * @return 角色数组
     */
    String[] roles() default {};

    /**
     * 级别
     * 
     * @return 级别
     */
    ResourceLevel level() default ResourceLevel.PROJECT;

    /**
     * 登陆后即可拥有的权限
     * 
     * @return 是否登录可访问接口
     */
    boolean permissionLogin() default false;

    /**
     * 公共权限,不需要登录就可访问
     * 
     * @return 是否为公开接口
     */
    boolean permissionPublic() default false;

    /**
     * 只能服务内部调用,不能通过网关访问
     * 
     * @return 是否为内部接口
     */
    boolean permissionWithin() default false;

    /**
     * 需验证签名才可访问的接口
     *
     * @return 是否为签名接口
     */
    boolean permissionSign() default false;

    /**
     * API标签
     *
     * @see ApiTag
     * @return API标签
     */
    String[] tags() default {};

    /**
     * 接口变更状态,默认未做任何变更 <p></p>
     * 如:<i>/v1/xx</i> 升级至 <i>/v2/xx</i>,需在 <i>/v2/xx</i> 上配置 status = {@link PermissionStatus#UPGRADE},并配置原API
     *
     * @return 变更状态
     * @see Permission#upgradeApiPath()
     * @see Permission#upgradeApiMethod()
     */
    PermissionStatus[] status() default { PermissionStatus.NONE };

    /**
     * 升级的API
     */
    String upgradeApiPath() default "";

    /**
     * 升级的API方法
     */
    HttpMethod upgradeApiMethod() default HttpMethod.GET;

}

@Permission ,设置API访问权限,常用有三种属性

	level :设置访问资源层级,包括 site,organization 两种层级
	permissionLogin :设置是否需要登录访问
	permissionPublic :设置任意访问。

注意permissionLogin :设置是否需要登录访问,即客户端登入(带token),登入后,要看角色是否 拥有这些api的访问权限,一般就用Hzero系统的token,这些api都可以访问,除了对于接口平台的 授权角色授权客户端后,访问接口平台的暴露地址,可以用我们配置的客户端的token访问接口

soga,访问 hezero权限平台控制的接口,必须得要角色

所以每个接口 上平台后,都得给 角色 分配 接口权限,但是Hzero,有些角色,是自动拥有,所有接口的权限的,底层有代码自动分配,而且有些客户端是绑定这些角色的,所以 你用这些客户端的token 和 这些角色 可以访问任何接口,不懂手动分配 接口权限

客户端

客户端是OAuth2.0授权中所需的客户端(client),无论是系统的标准登录,或者外部系统要访问我们系统的某些API,都离不开客户端。一个前端应用就可以理解为就是一个客户端。

在客户端管理中,可以根据实际需求创建客户端,并指定客户端授权模式(密码模式、隐式模式、授权码模式、客户端模式),配置访问令牌、刷新令牌的失效时间等。除了OAuth2.0客户端标准的配置外,我们还支持在客户端上配置 接口加密 、密码防重放、API防重放、密码加密传输、账号加密传输等等

授权模式

密码模式(password):使用client_id和client_secret以及用户名密码直接获取token
客户端授权模式(client_credentials):该模式直接根据client_id和client_secret即可获取token,无需用户参与
授权码模式(authorization_code):使用client_id和client_secret访问授权页面,用户授权后获取授权码,通过授权码换取token
简化模式(implicit):相较于authorization_code模式缺少获取授权码步骤,使用client_id和client_secret访问授权页面,用户授权后返回token
令牌刷新模式(refresh_token):通过refresh_token来刷新token的有效时间。

权限系统的 组织架构

用户
(员工和用户之间,互相分配)

员工
(员工和组织架构,相互分配)
组织架构
(组织架构,可以将组织,树形管理起来,然后组织下面,分配员工,这样完整的组织架构就出来了)
即 (用户 员工 组织架构) 表

工作流…

在组织架构下,都是以员工 为 基础来进行的,而不是用户,等于是,某个用户登入系统后 以某种员工的身份,来开启某个工作流

而且组织架构中人员的存在 也是 以员工为基础的,而不是系统用户,员工才是工作人员的身份,而用户只是系统的使用权

可以说用户 只是系统的使用权,而对于公司组织来说,是看以员工为基础的,登入系统需要用户登入,而业务记录,是员工

简单来说,用户是来 记录登入系统的(以公司人员来说),当然是客户系统的用户,可以 在业务里记录用户信息

角色 是来 对应权限的

组织是来管理 公司架构的

人员 是来记录 公司的业务信息的基础的

这4者创建时,或者所有层面(包括,组织层....)没有任何关系,都是相互分配关系后,就可以用从这几个层面,来共同 操作系统,一个层面是无法操作系统的

例如只有用户,没有角色,那么,你就无法获得任何权限,没有用户,那么你连系统都登不进去,所以 用户是必须有的,其他所有,层面都得跟用户建立联系,

但是在 具体某个操作时,我们只管 对应的层次 的功能,例如用户A登入,此时角色是B,B角色有操作 C接口的权限,那么在操作权限 这个角度,我们只考虑 角色B,而不是 用户A,在登入系统这个角度,我们只考虑用户A,而不是角色B,

员工分配用户和组织架构,不是说这个员工没有分配角色,没有访问接口的权限,不是这样的,这个员工,只是工作流中的一个数据信息,而执行工作流接口,得需要有这个 权限的角色 去执行

不明白的几点

	1.租户,租户层,平台层的区别
	2.接口有 租户层,平台层
	3.角色有平台层,租户层

对于token,现在有一点,如果没有清楚,哪些客户端 token,可以访问本地服务的接口(接口级别:平台层,租户层),实际一定,是由客户端下面的角色,是有 这些接口的权限的,只是不知道是哪个客户端,而且接口时平台层的时候,很多客户端都有这个权限,但是接口是租户级的时候就不知道了,简单方法,就直接在前端页面刷新后,data里面就有token,这个token对本地服务的,接口都是可以访问的,都是对于接口平台的,还是采用接口授权角色,授权客户端,用这个授权的客户端token是可以访问的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介:历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值