PowerJob 自 5.x 版本开始正式支持用户账号体系,为了方便各大开发者使用,PowerJob 原生提供了2种默认的账号体系(PowerJob账号体系、钉钉账号体系),同时基于高扩展性的设计理念,提供了允许开发者以极低成本接入企业内部任何账号体系的方式。
用户体系说明
PowerJob 用户体系的设计理念,是提供足够的开放性,让开发者能轻松接入企业已有的统一登录体系,降低使用成本,避免 N 个中间件 N 套账号密码的窘境。同时也对有安全性诉求的使用方更友好,可使用自己信赖的登录体系。
在此设计理念驱动下,PowerJob 主框架没有耦合任何一种登录方式,PowerJob 真正的 User 完全依赖第三方账号体系的同步。
举个例子,用户通过钉钉登录后,PowerJob 会感知到此回调,同步创建 accountType=DING,username=用户在钉钉内的唯一ID 的 PowerJob 账户。
权限体系说明
PowerJob 的用户权限体系,依照经典 RBAC(Role-Based Access Control,基于角色的访问控制)实现。
其中,角色类型定义如下:
- APP:权限范围收口在 APP 内部,仅拥有某个 App 的某个角色。比如拥有 App 的 DEVELOPER 权限,可对该 APP 内的任务、工作流、容器执行读、运维、写操作。
- Namespace:权限范围收口在 Namespace 纬度,包括对 namespace 的直接权限与 namespace 下所关联的全部 APP的穿透权限。比如拥有某个 namespace 的 DEVELOPER 权限,可对该 namespace 管理的全部 APP 内的任务、工作流、容器执行读、运维、写操作。
- GLOBAL:全局,目前仅开放了 GLOBAL + SU 的配置,即 PowerJob 全局超级管理员,拥有一切权限。
每个角色拥有的权限定义如下:
| 角色\权限 | READ****读 | WRITE****写 | OPS****运维 | SU****超级权限 |
|---|---|---|---|---|
| OBSERVER观察者 | Y | |||
| QA测试人员 | Y | Y | ||
| DEVELOPER开发者 | Y | Y | Y | |
| Admin管理员 | Y | Y | Y | Y |
支持的账号体系
PowerJob 账号体系
不过多介绍,简单的注册、登录功能。
钉钉账号体系
open.dingtalk.com/document/or…
# 钉钉应用 AppKey
oms.auth.dingtalk.appkey=dinggzqqzqqzqqzqq
# 钉钉应用 AppSecret
oms.auth.dingtalk.appSecret=iY-FS8mzqqzqq_xEizqqzqqzqqzqqzqqzqqYEbkZOal
# 回调地址,powerjob 前端控制台地址,即 powerjob-console 地址,比如本地调试为 http://localhost:7700,部署后则为 http://try.powerjob.tech
oms.auth.dingtalk.callbackUrl=http://localhost:7700
自定义账号体系
基于 PowerJob 强大而灵活的扩展性设计,仅需要开发者自行在 powerjob-server 实现 tech.powerjob.server.auth.login.ThirdPartyLoginService接口,适配企业自己的账号体系,即可接入。以下为详细说明。
接口定义
public interface ThirdPartyLoginService {
/**
* 登陆服务的类型
* @return 登陆服务类型,比如 PowerJob / DingTalk
*/
LoginTypeInfo loginType();
/**
* 生成登陆的重定向 URL
* @param httpServletRequest http请求
* @return 重定向地址
*/
String generateLoginUrl(HttpServletRequest httpServletRequest);
/**
* 执行第三方登录
* @param loginRequest 上下文
* @return 登录地址
*/
ThirdPartyUser login(ThirdPartyLoginRequest loginRequest);
/**
* JWT 登录的回调校验
* @param username 用户名称
* @param tokenLoginVerifyInfo 二次校验信息
* @return 是否通过
*/
default boolean tokenLoginVerify(String username, TokenLoginVerifyInfo tokenLoginVerifyInfo) {
return true;
}
}
可以参考官方的2个实现理解,比较简单不多赘述。