autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
51 lines (50 loc) • 1.97 kB
TypeScript
import Logger from '../../infrastructure/logging/Logger.js';
import type { Constitution } from '../constitution/Constitution.js';
export interface PermissionCheckResult {
allowed: boolean;
reason: string;
}
export interface PermissionCheck {
actor: string;
action: string;
resource: string;
}
/**
* PermissionManager - 权限管理器
* 基于 3-tuple 模型:(actor, action, resource)
*/
export declare class PermissionManager {
constitution: Constitution;
logger: ReturnType<typeof Logger.getInstance>;
constructor(constitution: Constitution);
/** 检查权限(3-tuple: actor, action, resource) */
check(actor: string, action: string, resource: string | undefined): PermissionCheckResult;
/**
* 规范化 action 名称
* 处理多种格式:
* - read_recipes -> read:recipes
* - read:recipes -> read:recipes(已规范化)
* - perm_external_agent_read_recipes -> read:recipes(测试使用的格式)
*/
_normalizeAction(action: string): string;
/** 检查特殊权限 */
checkSpecialPermissions(actor: string, action: string, resource: string | undefined, permissions: string[]): boolean;
/**
* 从资源路径提取资源类型
* 例如:/recipes/123 → recipes
* /candidates/456 → candidates
* { type: 'recipes', id: '123' } → recipes
*/
getResourceType(resource: string | Record<string, unknown> | undefined): string;
/** 强制权限检查(失败时抛异常) */
enforce(actor: string, action: string, resource: string | undefined): boolean;
/** 批量检查权限 */
checkMultiple(checks: PermissionCheck[]): Array<PermissionCheck & {
result: PermissionCheckResult;
}>;
/** 获取角色的所有权限 */
getRolePermissions(actor: string): string[];
/** 获取角色的约束条件 */
getRoleConstraints(actor: string): string[];
}
export default PermissionManager;