UserGroup 是 ZerOS 内核的用户组管理系统,负责管理用户组和管理员组,与 UserControl 兼容。支持创建组、添加/移除成员、查询组成员等操作,并提供严格的权限管控。
LStorage - 本地存储(用于持久化组数据)UserControl - 用户控制系统(用于用户级别检查和用户验证)PermissionManager - 权限管理器(用于进程权限检查)ProcessManager - 进程管理器(用于获取当前进程 ID)系统支持两种组类型:
GROUP_TYPE.USER_GROUP): 普通用户组,包含普通用户GROUP_TYPE.ADMIN_GROUP): 管理员组,包含管理员用户系统会自动创建以下默认组:
注意: 默认组不能被删除。
所有公共 API 方法都会进行进程权限检查:
SYSTEM_STORAGE_WRITE_USER_CONTROL 权限SYSTEM_STORAGE_READ_USER_CONTROL 权限LStorage 的 userControl.groups 键中userControl.groups 键被标记为危险键,需要相应的权限才能访问UserGroup 内核模块可以写入该键(通过调用栈验证)用户组系统在系统启动时自动初始化:
await UserGroup.init();
init()初始化用户组系统,加载组数据并创建默认组。
返回值: Promise<void>
示例:
await UserGroup.init();
ensureInitialized()确保用户组系统已初始化。
返回值: Promise<void>
示例:
await UserGroup.ensureInitialized();
createGroup(groupName, type, description)创建新组(需要进程权限 + 管理员权限)。
参数:
groupName (string): 组名type (string, 可选): 组类型(GROUP_TYPE.USER_GROUP 或 GROUP_TYPE.ADMIN_GROUP),默认为 USER_GROUPdescription (string, 可选): 组描述返回值: Promise<boolean> - 是否创建成功
权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL示例:
// 创建普通用户组
const success = await UserGroup.createGroup('developers', UserGroup.GROUP_TYPE.USER_GROUP, '开发人员组');
// 创建管理员组(需要默认管理员权限)
const success = await UserGroup.createGroup('superAdmins', UserGroup.GROUP_TYPE.ADMIN_GROUP, '超级管理员组');
deleteGroup(groupName)删除组(需要进程权限 + 默认管理员权限)。
参数:
groupName (string): 组名返回值: Promise<boolean> - 是否删除成功
权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL注意: 不能删除默认组(admins 和 users)。
示例:
const success = await UserGroup.deleteGroup('developers');
getGroup(groupName)获取组信息(需要读取权限)。
参数:
groupName (string): 组名返回值: Promise<Object | null> - 组信息对象,包含:
name (string): 组名type (string): 组类型members (ArraycreatedAt (number): 创建时间戳description (string | null): 组描述如果组不存在则返回 null。
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const group = await UserGroup.getGroup('admins');
console.log(group);
// {
// name: 'admins',
// type: 'ADMIN_GROUP',
// members: ['root'],
// createdAt: 1234567890000,
// description: '系统管理员组,包含所有管理员用户'
// }
getAllGroups()获取所有组(需要读取权限)。
返回值: Promise<Array<Object>> - 组列表,每个组对象包含:
name (string): 组名type (string): 组类型members (ArraycreatedAt (number): 创建时间戳description (string | null): 组描述权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const groups = await UserGroup.getAllGroups();
console.log(groups);
// [
// { name: 'admins', type: 'ADMIN_GROUP', members: ['root'], ... },
// { name: 'users', type: 'USER_GROUP', members: ['TestUser'], ... }
// ]
hasGroup(groupName)检查组是否存在(需要读取权限)。
参数:
groupName (string): 组名返回值: Promise<boolean> - 是否存在
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const exists = await UserGroup.hasGroup('developers');
if (exists) {
console.log('组存在');
}
getGroupType(groupName)获取组类型(需要读取权限)。
参数:
groupName (string): 组名返回值: Promise<string | null> - 组类型(USER_GROUP 或 ADMIN_GROUP),如果组不存在则返回 null
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const type = await UserGroup.getGroupType('admins');
console.log(type); // 'ADMIN_GROUP'
updateGroupDescription(groupName, description)更新组描述(需要进程权限 + 管理员权限)。
参数:
groupName (string): 组名description (string | null): 新描述(null 表示移除描述)返回值: Promise<boolean> - 是否更新成功
权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL示例:
const success = await UserGroup.updateGroupDescription('developers', '开发人员组(更新)');
addMember(groupName, username)添加成员到组(需要进程权限 + 管理员权限)。
参数:
groupName (string): 组名username (string): 用户名返回值: Promise<boolean> - 是否添加成功
权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL注意: 如果用户已存在于组中,返回 true(视为成功)。
示例:
const success = await UserGroup.addMember('developers', 'NewUser');
removeMember(groupName, username)从组中移除成员(需要进程权限 + 管理员权限)。
参数:
groupName (string): 组名username (string): 用户名返回值: Promise<boolean> - 是否移除成功
权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL注意: 如果用户不存在于组中,返回 true(视为成功)。
示例:
const success = await UserGroup.removeMember('developers', 'NewUser');
getMembers(groupName)获取组成员列表(需要读取权限)。
参数:
groupName (string): 组名返回值: Promise<Array<string>> - 成员列表
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const members = await UserGroup.getMembers('admins');
console.log(members); // ['root']
isMember(groupName, username)检查用户是否在组中(需要读取权限)。
参数:
groupName (string): 组名username (string): 用户名返回值: Promise<boolean> - 是否在组中
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const isMember = await UserGroup.isMember('admins', 'root');
if (isMember) {
console.log('用户在组中');
}
getUserGroups(username)获取用户所在的所有组(需要读取权限)。
参数:
username (string): 用户名返回值: Promise<Array<string>> - 组名列表
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const groups = await UserGroup.getUserGroups('root');
console.log(groups); // ['admins']
getMemberCount(groupName)获取组中的成员数量(需要读取权限)。
参数:
groupName (string): 组名返回值: Promise<number> - 成员数量
权限要求:
SYSTEM_STORAGE_READ_USER_CONTROL示例:
const count = await UserGroup.getMemberCount('admins');
console.log(`管理员组有 ${count} 个成员`);
addMembers(groupName, usernames)批量添加成员到组(需要进程权限 + 管理员权限)。
参数:
groupName (string): 组名usernames (Array返回值: Promise<Object> - 操作结果对象,包含:
success (number): 成功添加的成员数failed (number): 失败的成员数errors (Array权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL示例:
const result = await UserGroup.addMembers('developers', ['User1', 'User2', 'User3']);
console.log(`成功: ${result.success}, 失败: ${result.failed}`);
// 成功: 3, 失败: 0
removeMembers(groupName, usernames)批量从组中移除成员(需要进程权限 + 管理员权限)。
参数:
groupName (string): 组名usernames (Array返回值: Promise<Object> - 操作结果对象,包含:
success (number): 成功移除的成员数failed (number): 失败的成员数errors (Array权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL示例:
const result = await UserGroup.removeMembers('developers', ['User1', 'User2']);
console.log(`成功: ${result.success}, 失败: ${result.failed}`);
// 成功: 2, 失败: 0
syncDefaultGroups()同步默认组(根据 UserControl 中的用户级别更新默认组)(需要进程权限 + 管理员权限)。
将管理员用户添加到 admins 组,将普通用户添加到 users 组。
返回值: Promise<boolean> - 是否同步成功
权限要求:
SYSTEM_STORAGE_WRITE_USER_CONTROL示例:
const success = await UserGroup.syncDefaultGroups();
if (success) {
console.log('默认组已同步');
}
// 1. 确保用户组系统已初始化
await UserGroup.ensureInitialized();
// 2. 创建新组
const success = await UserGroup.createGroup('developers', UserGroup.GROUP_TYPE.USER_GROUP, '开发人员组');
if (success) {
console.log('组创建成功');
}
// 3. 添加成员
await UserGroup.addMember('developers', 'User1');
await UserGroup.addMember('developers', 'User2');
// 4. 获取组信息
const group = await UserGroup.getGroup('developers');
console.log('组信息:', group);
// 5. 检查用户是否在组中
const isMember = await UserGroup.isMember('developers', 'User1');
if (isMember) {
console.log('User1 在开发人员组中');
}
// 6. 获取用户所在的所有组
const userGroups = await UserGroup.getUserGroups('User1');
console.log('User1 所在的组:', userGroups);
// 7. 批量添加成员
const result = await UserGroup.addMembers('developers', ['User3', 'User4']);
console.log(`批量添加结果: 成功 ${result.success}, 失败 ${result.failed}`);
// 8. 同步默认组
await UserGroup.syncDefaultGroups();
// 检查程序是否有权限访问 UserGroup API
// 需要先通过 PermissionManager 获得相应权限
// 在程序的 __info__ 中声明所需权限
__info__: {
permissions: [
PermissionManager.PERMISSION.SYSTEM_STORAGE_READ_USER_CONTROL, // 读取组信息
PermissionManager.PERMISSION.SYSTEM_STORAGE_WRITE_USER_CONTROL // 管理组
]
}
// 使用 UserGroup API
await UserGroup.ensureInitialized();
// 尝试创建组(如果缺少权限,会返回 false 并记录警告日志)
const success = await UserGroup.createGroup('testGroup');
if (!success) {
console.error('创建组失败:可能是权限不足');
}
PermissionManager)和用户权限(通过 UserControl)admins 和 users 默认组,这些组不能被删除LStorage 的 userControl.groups 键中LStorage 和 UserControl,确保这些模块已初始化后再使用userControl.groups 键只能由 UserGroup 内核模块写入(通过调用栈验证),用户程序无法直接修改UserControl 中PermissionManager 获得相应权限的程序才能访问