Files
CloudHome-Ops/lib/utils/session_org_scope.dart

38 lines
1.4 KiB
Dart
Raw Normal View History

import 'package:flutter/foundation.dart';
/// 当前登录用户的「数据权限范围」——其所属组织子树的根节点 ID。
///
/// 用途:在客户端对组织树 / 门店列表做二次收敛,确保非管理员用户只能看到
/// 自己所属组织及下属门店的数据,防止后端 `/sys/org/tree` 返回全量树时被
/// 越权展示其他组织的数据。
///
/// 由 [AuthNotifier] 在登录成功与会话恢复时写入 [setCurrentOrg],登出 /
/// 会话失效时 [clear]。读取方([OrgService])仅在 [enabled] 为 true 时过滤,
/// [currentOrgId] 为空(管理员 / 无法识别)时不做任何裁剪,行为与后端一致。
class SessionOrgScope {
SessionOrgScope._();
static final SessionOrgScope instance = SessionOrgScope._();
/// 当前用户所属组织 ID。空字符串表示「未限定」(管理员或无法识别),
/// 此时客户端不过滤,完全信任后端返回。
String currentOrgId = '';
/// 是否启用客户端数据权限收敛。
bool get enabled => currentOrgId.isNotEmpty;
/// 写入当前用户组织范围。
void setCurrentOrg(String? orgId) {
currentOrgId = orgId ?? '';
if (kDebugMode) {
debugPrint(
'[SessionOrgScope] currentOrgId=${currentOrgId.isEmpty ? "(未限定/管理员)" : currentOrgId}',
);
}
}
/// 清空(登出 / 会话失效)。
void clear() {
currentOrgId = '';
}
}