docs: ai 协作文档体系重构与多 ai 仲裁结果落地
1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md) 2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration) 3.各服务 01/02 文档补全 4.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens) 5.Proto 契约补全 6.004 架构影响地图更新 7.端口分配表 8.设计规格文档
This commit is contained in:
48
packages/ui-components/src/require-permission.tsx
Normal file
48
packages/ui-components/src/require-permission.tsx
Normal file
@@ -0,0 +1,48 @@
|
||||
import type { ReactNode } from "react";
|
||||
|
||||
/**
|
||||
* RequirePermission - L3 组件级视口控制
|
||||
*
|
||||
* 用途:根据当前用户权限点决定是否渲染 children。
|
||||
* 无权限时不渲染 children(返回 null 或自定义 fallback)。
|
||||
*
|
||||
* 权限点命名遵循 F7 裁决:`<RESOURCE>_<ACTION>`(如 `EXAM_READ`、`GRADE_READ_CHILD`)。
|
||||
* 数据范围用后缀 `_OWN`/`_CHILD`(如 `GRADE_READ_CHILD`)。
|
||||
*
|
||||
* 注意:本组件依赖 `@edu/hooks` 的 `usePermission()`。为避免循环依赖,
|
||||
* 权限检查函数通过 props 注入,由调用方(apps/*)从 usePermission() 获取后传入。
|
||||
*
|
||||
* @example
|
||||
* import { usePermission } from "@edu/hooks";
|
||||
* const { hasPermission } = usePermission();
|
||||
*
|
||||
* <RequirePermission perm="EXAM_CREATE" hasPermission={hasPermission}>
|
||||
* <Button>新建考试</Button>
|
||||
* </RequirePermission>
|
||||
*/
|
||||
|
||||
export interface RequirePermissionProps {
|
||||
/** 权限点(F7 规范:<RESOURCE>_<ACTION>) */
|
||||
perm: string;
|
||||
/**
|
||||
* 权限检查函数(由 @edu/hooks 的 usePermission().hasPermission 注入)
|
||||
* 返回 true 渲染 children,false 渲染 fallback。
|
||||
*/
|
||||
hasPermission: (perm: string) => boolean;
|
||||
/** 子节点(有权限时渲染) */
|
||||
children: ReactNode;
|
||||
/** 无权限时的降级 UI;未提供时返回 null */
|
||||
fallback?: ReactNode;
|
||||
}
|
||||
|
||||
export function RequirePermission({
|
||||
perm,
|
||||
hasPermission,
|
||||
children,
|
||||
fallback = null,
|
||||
}: RequirePermissionProps): ReactNode {
|
||||
if (!hasPermission(perm)) {
|
||||
return fallback;
|
||||
}
|
||||
return children;
|
||||
}
|
||||
Reference in New Issue
Block a user