$Logic({ title: '角色数据表格', description: '角色管理页面的数据表格数据源', directory: 'permission_center(权限中心)', returnDescription: '按条件筛选和排序的角色分页列表', }) export function LcapLoadRoleManagementTableView( /** 当前页码 */ page: Integer, /** 每页条数 */ size: Integer, /** 排序字段名 */ sort: String = '', /** 排序方向(ASC/DESC) */ order: String = '', /** 查询过滤条件(支持角色名称模糊查询) */ filter: app.dataSources.defaultDS.entities.LcapRole ): { /** 角色列表 */ list: List<{ /** 角色基本信息 */ lcapRole: app.dataSources.defaultDS.entities.LcapRole; }>; /** 符合条件的总记录数 */ total: Integer; } { let result; result = PAGINATE(FROM(app.dataSources.defaultDS.entities.LcapRoleEntity, LcapRole => $() .WHERE(LIKE(LcapRole.name, filter.name)) .SELECT({ lcapRole: LcapRole }) .ORDER_BY((resultItem) => [[resultItem[sort], order]])), page, size); return result; } $Logic({ title: '查询角色权限', description: '根据角色ID查询相关联的权限信息', directory: 'permission_center(权限中心)', returnDescription: '指定角色关联的权限分页列表', }) export function LcapGetPermissionByRoleId( /** 角色主键 ID */ roleId: Integer, /** 当前页码 */ page: Integer, /** 每页条数 */ size: Integer, ): { /** 权限实体列表 */ list: List; /** 总记录数 */ total: Integer; } { let search: List<{ lcapRolePerMapping: app.dataSources.defaultDS.entities.LcapRolePerMapping }>; let rolePermissionMappingIdList: List; let result;本文档为 KE04-example-permission--auth-and-rbac.md 的拆分,包含角色表格、角色权限、角色成员等 Logic 示例。
if (nasl.util.HasValue(roleId)) {
search = FROM(app.dataSources.defaultDS.entities.LcapRolePerMappingEntity, LcapRolePerMapping => $()
.WHERE(LcapRolePerMapping.roleId == roleId)
.SELECT({ lcapRolePerMapping: LcapRolePerMapping }));
if (nasl.util.HasValue(search)) {
rolePermissionMappingIdList = nasl.util.ListTransform(search, (item) => item.lcapRolePerMapping.permissionId);
result = PAGINATE(nasl.util.ListTransform(
FROM(app.dataSources.defaultDS.entities.LcapPermissionEntity, LcapPermission => $()
.WHERE(IN(LcapPermission.id, rolePermissionMappingIdList))
.SELECT({ lcapPermission: LcapPermission })),
(item) => item.lcapPermission
), page, size);
} else {
result = { list: nasl.util.New<List<app.dataSources.defaultDS.entities.LcapPermission>>(), total: 0 };
}
} else {
result = { list: nasl.util.New<List<app.dataSources.defaultDS.entities.LcapPermission>>(), total: 0 };
}
return result;
}
$Logic({ title: '添加角色成员', description: '为角色添加成员页面的数据列表数据源', directory: 'permission_center(权限中心)', returnDescription: '按条件筛选和排序的用户角色映射分页列表', }) export function LcapLoadUserRoleMappingTableView( /** 当前页码 */ page: Integer, /** 每页条数 */ size: Integer, /** 排序字段名 */ sort: String = '', /** 排序方向(ASC/DESC) */ order: String = '', /** 查询过滤条件(支持 roleId 和用户名模糊查询) */ filter: app.dataSources.defaultDS.entities.LcapUserRoleMapping, ): { /** 用户角色映射列表,每条包含映射信息和角色信息 */ list: List<{ /** 用户角色映射记录 */ lcapUserRoleMapping: app.dataSources.defaultDS.entities.LcapUserRoleMapping; /** 关联的角色信息 */ lcapRole: app.dataSources.defaultDS.entities.LcapRole; }>; /** 符合条件的总记录数 */ total: Integer; } { let result; result = PAGINATE(FROM(app.dataSources.defaultDS.entities.LcapUserRoleMappingEntity, LcapUserRoleMapping => $() .LEFT_JOIN(app.dataSources.defaultDS.entities.LcapRoleEntity, LcapRole => ON(LcapUserRoleMapping.roleId == LcapRole.id) .WHERE((LcapUserRoleMapping.roleId == filter.roleId) && (LIKE(LcapUserRoleMapping.userName, filter.userName))) .SELECT({ lcapUserRoleMapping: LcapUserRoleMapping, lcapRole: LcapRole, }) .ORDER_BY((resultItem) => [[resultItem[sort], order]]))), page, size); return result; }服务端逻辑:角色管理页「为角色添加成员」列表数据源;按 roleId、userName 筛选,分页排序。
$Logic({ title: '查询其他权限', description: '查询除入参权限ID以外的权限', directory: 'permission_center(权限中心)', returnDescription: '指定角色尚未绑定的权限分页列表', }) export function LcapLoadAddRolePermissionTableView( /** 当前页码 */ page: Integer, /** 每页条数 */ size: Integer, /** 排序字段名 */ sort: String = '', /** 排序方向(ASC/DESC) */ order: String = '', /** 已绑定的权限 ID 列表(用于排除,函数内部会重新赋值) */ permissionIdList: List, /** 角色主键 ID */ roleId: Integer, ): { /** 可添加的权限列表 */ list: List<{ /** 权限基本信息 */ lcapPermission: app.dataSources.defaultDS.entities.LcapPermission; }>; /** 总记录数 */ total: Integer; } { let result; permissionIdList = nasl.util.ListTransform(FROM(app.dataSources.defaultDS.entities.LcapRolePerMappingEntity, LcapRolePerMapping => $() .LEFT_JOIN(app.dataSources.defaultDS.entities.LcapPermissionEntity, LcapPermission => ON(LcapRolePerMapping.permissionId == LcapPermission.id) .WHERE(LcapRolePerMapping.roleId == roleId) .SELECT({ lcapRolePerMapping: LcapRolePerMapping, lcapPermission: LcapPermission, }))), (item: { lcapRolePerMapping: app.dataSources.defaultDS.entities.LcapRolePerMapping, lcapPermission: app.dataSources.defaultDS.entities.LcapPermission }) => item.lcapPermission.id); result = PAGINATE(FROM(app.dataSources.defaultDS.entities.LcapPermissionEntity, LcapPermission => $() .WHERE(!(IN(LcapPermission.id, permissionIdList))) .SELECT({ lcapPermission: LcapPermission, }) .ORDER_BY((resultItem) => [[resultItem[sort], order]])), page, size); return result; }服务端逻辑:角色管理页「添加权限」时,查询该角色未绑定的权限列表,分页排序。
$Logic({ title: '删除角色权限', description: '根据角色ID和权限ID删除角色权限关联数据ID', directory: 'permission_center(权限中心)', }) export function LcapGetMappingDeleteByRoleIdAndPermissionId( /** 角色主键 ID */ roleId: Integer, /** 权限主键 ID */ permissionId: Integer, ) { let search: List; if (nasl.util.HasValue(roleId, permissionId)) { search = FROM(app.dataSources.defaultDS.entities.LcapRolePerMappingEntity, LcapRolePerMapping => $() .WHERE((LcapRolePerMapping.roleId == roleId) && (LcapRolePerMapping.permissionId == permissionId)) .GROUP_BY(LcapRolePerMapping.id) .SELECT({ id: LcapRolePerMapping.id, })); if (nasl.util.HasValue(search)) { app.dataSources.defaultDS.entities.LcapRolePerMappingEntity.batchDelete(search); } else { } } else { } return; }服务端逻辑:角色管理页移除角色下某条权限时,按 roleId、permissionId 删除 LcapRolePerMapping 记录。
- **禁止**在 `FROM` 中对 `LcapRole.name` 使用 `LIKE` 或以入参作为 `WHERE` 条件;必须返回**全量**名称集合,否则唯一性校验不完整。 $Logic({ title: '获取所有角色名称', description: '获取去重后的角色名列表,用于新增/编辑时的重复校验', directory: 'permission_center(权限中心)', returnDescription: '去重后的全量角色名称列表,用于唯一性校验', }) export function LcapGetRoleNameList(): List { let search: List<{ lcapRole: app.dataSources.defaultDS.entities.LcapRole }>; let result; search = FROM(app.dataSources.defaultDS.entities.LcapRoleEntity, LcapRole => $() .SELECT({ lcapRole: LcapRole, })); if (nasl.util.HasValue(search)) { result = nasl.util.ListTransform(search, (item: { lcapRole: app.dataSources.defaultDS.entities.LcapRole }) => item.lcapRole.name); } else { result = nasl.util.New>(); } nasl.util.ListDistinct(result); return result; }服务端逻辑:全量查询所有角色名称 →
ListDistinct返回。编辑时在「角色管理」页由前端nasl.util.Remove(roleNameList, updateRoleName)排除当前名,再配合nasl.validation.unique(roleNameList)。
$Logic({ title: '查询其他用户', description: '查询除入参用户ID以外的用户', directory: 'permission_center(权限中心)', returnDescription: '尚未加入指定角色的用户列表', }) export function LcapLoadAddRoleUserTableView( /** 已加入角色的用户标识列表(函数内部会重新赋值) */ userIds: List, /** 角色主键 ID */ roleId: Integer, ): List<{ lcapUser: app.dataSources.defaultDS.entities.LcapUser }> { let result; userIds = nasl.util.ListTransform(FROM(app.dataSources.defaultDS.entities.LcapUserRoleMappingEntity, LcapUserRoleMapping => $() .LEFT_JOIN(app.dataSources.defaultDS.entities.LcapRoleEntity, LcapRole => ON(LcapUserRoleMapping.roleId == LcapRole.id) .WHERE(LcapUserRoleMapping.roleId == roleId) .SELECT({ lcapUserRoleMapping: LcapUserRoleMapping, lcapRole: LcapRole, }))), (item: { lcapUserRoleMapping: app.dataSources.defaultDS.entities.LcapUserRoleMapping, lcapRole: app.dataSources.defaultDS.entities.LcapRole }) => item.lcapUserRoleMapping.userId); result = FROM(app.dataSources.defaultDS.entities.LcapUserEntity, LcapUser => $() .WHERE(!(IN(LcapUser.userId, userIds))) .SELECT({ lcapUser: LcapUser, })); return result; }服务端逻辑:角色管理页「为角色添加成员」时,查询尚未加入该角色的用户列表。