跳到主要内容

标准角色

标准角色是基于RBAC模型的权限管理组件,提供角色定义、权限分配和成员绑定的完整解决方案。它负责用户权限控制、API访问授权和门户访问管理,支持角色继承、权限组合和分级授权机制,与组织架构深度集成实现企业级权限管控。

标准角色元素分层结构为Meta(roles.Meta) → Type(roles.NormalType) → 实例,开发者可通过JitAi的可视化开发工具快捷地创建标准角色实例元素。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的roles.NormalType元素,以实现自己的封装。

快速开始

创建实例元素

目录结构

推荐目录结构
roles/
├── developer/ # 角色实例目录(路径可自定义)
│ ├── e.json # 元素定义文件(必需)
│ └── developer.json # 角色配置文件(必需)

e.json文件

e.json配置示例
{
"backendBundleEntry": ".",
"frontBundleEntry": "./developer.json",
"title": "开发者",
"type": "roles.NormalType"
}

业务配置文件

developer.json配置示例
{
"apiPerm": {
"services.UserService.createUser": "allow",
"services.ProjectService.*": "deny"
},
"apiPermSwitch": 1,
"shellPerm": {
"shells.Admin": "all",
"shells.Portal": "read"
}
}

调用示例

获取角色信息
# 获取角色实例
role = app.getElement("roles.developer")

# 获取角色基本信息
role_info = role.info
print(f"角色名称: {role_info['roleTitle']}")
print(f"角色ID: {role_info['roleName']}")

# 获取权限配置
api_perms = role_info.get('apiPerm', {})
shell_perms = role_info.get('shellPerm', {})

元素配置

e.json配置

配置项类型必填说明
titlestring角色显示名称
typestring固定值:roles.NormalType
backendBundleEntrystring后端入口,通常为 "."
frontBundleEntrystring前端入口,指向配置文件

业务配置文件配置

配置项类型必填说明
apiPermobjectAPI权限配置,键为API路径,值为权限类型
apiPermSwitchnumberAPI权限开关,0关闭/1开启
shellPermobject门户权限配置,键为门户fullName,值为权限类型

API权限配置说明

API权限配置示例
{
"apiPerm": {
"services.UserService.createUser": "allow", // 明确允许
"services.UserService.deleteUser": "deny", // 明确拒绝
"services.ProjectService.*": "allow", // 通配符匹配
"models.UserModel.save": "allow" // 模型方法权限
},
"apiPermSwitch": 1
}

门户权限配置说明

门户权限配置示例
{
"shellPerm": {
"shells.Admin": "all", // 完全访问
"shells.Portal": "read", // 只读访问
"shells.Api": "none" // 无权访问
}
}

属性

info

获取角色的完整信息,包含基本配置和权限数据。

使用示例
role = app.getElement("roles.developer")
role_data = role.info

# 访问角色信息
print(role_data['roleName']) # 角色fullName
print(role_data['roleTitle']) # 角色显示名称
print(role_data['apiPerm']) # API权限配置
print(role_data['shellPerm']) # 门户权限配置

方法

getRoleData

获取角色的完整配置数据,支持应用继承的数据合并。

返回值

  • 类型dict
  • 说明:包含角色完整配置的字典

使用示例

获取角色数据
role = app.getElement("roles.developer")
data = role.getRoleData()

# 检查角色权限
def check_api_permission(api_path):
api_perms = data.get('apiPerm', {})

# 精确匹配
if api_path in api_perms:
return api_perms[api_path] == 'allow'

# 通配符匹配
for perm_path, permission in api_perms.items():
if perm_path.endswith('*'):
prefix = perm_path[:-1]
if api_path.startswith(prefix):
return permission == 'allow'

return False

# 使用示例
has_permission = check_api_permission("services.UserService.createUser")

高级特性

角色继承

标准角色支持应用级继承,子应用可以继承父应用的角色配置并进行覆盖或扩展。

子应用角色配置
{
"apiPerm": {
"services.NewService.*": "allow"
},
"apiPermSwitch": 1,
"shellPerm": {
"shells.NewPortal": "all"
}
}

权限检查集成

在业务代码中集成权限检查逻辑:

权限检查实现
def check_user_role_permission(user_id, api_path):
# 获取用户的角色列表
member_model = app.getElement("roles.models.AppRoleMemberModel")
user_roles = member_model.query(
filter=f"Q(authId='{user_id}')",
fieldList=['roleName']
)

# 检查每个角色的权限
for role_data in user_roles['rowDatas']:
role = app.getElement(role_data['roleName'])
role_info = role.info

api_perms = role_info.get('apiPerm', {})
if api_perms.get(api_path) == 'allow':
return True

return False

动态权限管理

通过修改角色配置文件实现动态权限调整:

动态权限更新
import json

def update_role_permissions(role_name, new_permissions):
# 获取角色节点
role_element = app.getElement(role_name)
config_file = f"{role_element._nodes[0].name}.json"

# 读取当前配置
current_config = json.loads(role_element._nodes[0].getFile(config_file))

# 更新权限
current_config['apiPerm'].update(new_permissions)

# 保存配置(实际项目中需要通过管理接口)
print(f"新的权限配置: {current_config}")