{"_id":"@anycms/rbac","name":"@anycms/rbac","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@anycms/rbac","version":"0.1.0","private":false,"type":"module","main":"./src/index.ts","types":"./src/index.ts","exports":{".":"./src/index.ts","./types":"./src/types.ts","./constants":"./src/constants.ts","./utils":"./src/utils.ts","./context":"./src/context.tsx","./guard":"./src/guard.tsx","./api":"./src/api/index.ts","./api/client":"./src/api/client.ts","./api/permissions":"./src/api/permissions.ts","./api/roles":"./src/api/roles.ts","./api/role-permissions":"./src/api/role-permissions.ts","./admin":"./src/admin/index.ts","./admin/hooks":"./src/admin/hooks.ts"},"dependencies":{"react":"^19.2.4"},"_id":"@anycms/rbac@0.1.0","description":"基于角色的访问控制（RBAC）前端包，提供权限判断、角色管理、权限管理的完整解决方案。","_integrity":"sha512-NKg2C9uszapLDiQk0eOo55x4mbpRjAZjBwtrrLj5VfOrJ/PEaxe0OVWwXKzYDswTS6xLGbF554kqc4VncDOYOA==","_resolved":"/tmp/d8dbf294a0cda33607e0dcf6e4cd02eb/anycms-rbac-0.1.0.tgz","_from":"file:anycms-rbac-0.1.0.tgz","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-NKg2C9uszapLDiQk0eOo55x4mbpRjAZjBwtrrLj5VfOrJ/PEaxe0OVWwXKzYDswTS6xLGbF554kqc4VncDOYOA==","shasum":"1349f13398030630146de93bd394fe09fea8ef7f","tarball":"https://registry.npmjs.org/@anycms/rbac/-/rbac-0.1.0.tgz","fileCount":18,"unpackedSize":41322,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG9+5zT1Bxg/0TAoKe1kka0POErwnfivU0x2QMigjLiIAiBevu0QWknbDf8omZfT5k0X7rajdWJanG8489Z/sJjdfw=="}]},"_npmUser":{"name":"wuliangdi","email":"wu@liangdi.me"},"directories":{},"maintainers":[{"name":"wuliangdi","email":"wu@liangdi.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rbac_0.1.0_1779419462930_0.8070345485848984"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-22T03:11:02.745Z","0.1.0":"2026-05-22T03:11:03.100Z","modified":"2026-05-22T03:11:03.384Z"},"maintainers":[{"name":"wuliangdi","email":"wu@liangdi.me"}],"description":"基于角色的访问控制（RBAC）前端包，提供权限判断、角色管理、权限管理的完整解决方案。","readme":"# @anycms/rbac\n\n基于角色的访问控制（RBAC）前端包，提供权限判断、角色管理、权限管理的完整解决方案。\n\n## 安装\n\n```bash\npnpm add @anycms/rbac\n```\n\n## 模块结构\n\n```\n@anycms/rbac              # 主入口（类型、工具函数、Guard、Context）\n@anycms/rbac/types        # 类型定义\n@anycms/rbac/constants    # 内置角色常量\n@anycms/rbac/utils        # 权限/角色判断纯函数\n@anycms/rbac/context      # RbacProvider / useRbac\n@anycms/rbac/guard        # PermissionGuard / usePermissionCheck\n@anycms/rbac/api          # 权限、角色、角色-权限关联 API\n@anycms/rbac/admin        # 管理后台适配器 + Hooks\n@anycms/rbac/admin/hooks  # useRoles / usePermissions\n```\n\n## 使用方式\n\n### 1. 提供 RbacContext\n\n在应用顶层（或 AuthProvider 内部）嵌套 `RbacProvider`：\n\n```tsx\nimport { RbacProvider } from \"@anycms/rbac/context\";\n\nfunction App({ children }) {\n  const user = useCurrentUser(); // 从你的认证系统获取\n\n  return (\n    <RbacProvider permissions={user?.permissions ?? []} roles={user?.roles ?? []}>\n      {children}\n    </RbacProvider>\n  );\n}\n```\n\n### 2. 权限守卫组件\n\n```tsx\nimport { PermissionGuard } from \"@anycms/rbac/guard\";\n\n// 单个权限\n<PermissionGuard permission=\"agent:create\">\n  <Button>创建 Agent</Button>\n</PermissionGuard>\n\n// 多个权限（任意一个满足）\n<PermissionGuard permission={[\"agent:read\", \"agent:write\"]}>\n  <Button>操作</Button>\n</PermissionGuard>\n\n// 多个权限（全部满足）\n<PermissionGuard permission={[\"agent:read\", \"agent:write\"]} requireAll>\n  <Button>完整操作</Button>\n</PermissionGuard>\n\n// 角色判断\n<PermissionGuard role=\"admin\">\n  <Button>管理后台</Button>\n</PermissionGuard>\n\n// 自定义 fallback\n<PermissionGuard permission=\"system:write\" fallback={<span>无权限</span>}>\n  <Button>系统设置</Button>\n</PermissionGuard>\n```\n\n### 3. 编程式权限检查\n\n```tsx\nimport { usePermissionCheck } from \"@anycms/rbac/guard\";\n\nfunction Toolbar() {\n  const { can, canAny, canAll, is, isAny, permissions, roles } = usePermissionCheck();\n\n  return (\n    <div>\n      {can(\"agent:create\") && <Button>创建</Button>}\n      {is(\"admin\") && <Button>管理</Button>}\n      {canAny([\"agent:read\", \"agent:write\"]) && <Button>操作</Button>}\n    </div>\n  );\n}\n```\n\n### 4. 纯工具函数\n\n无需 React Context，直接传入权限/角色数组：\n\n```ts\nimport { hasPermission, hasRole, hasAnyPermission, hasAllPermissions, canAccessAdmin } from \"@anycms/rbac/utils\";\n\nconst userPermissions = [\"agent:create\", \"agent:read\"];\nconst userRoles = [\"user\"];\n\nhasPermission(userPermissions, \"agent:create\"); // true\nhasRole(userRoles, \"admin\");                     // false\nhasAnyPermission(userPermissions, [\"agent:delete\", \"agent:read\"]); // true\nhasAllPermissions(userPermissions, [\"agent:create\", \"agent:read\"]); // true\ncanAccessAdmin(userRoles, userPermissions);      // false\n```\n\n### 5. API 调用\n\n```ts\nimport { listPermissions, createPermission } from \"@anycms/rbac/api/permissions\";\nimport { listRoles, assignRole, getUserRoles } from \"@anycms/rbac/api/roles\";\nimport { grantPermission, revokePermission } from \"@anycms/rbac/api/role-permissions\";\n\n// 列出权限\nconst res = await listPermissions({ page: 1, page_size: 20 });\n\n// 分配角色\nawait assignRole({ user_id: \"u1\", role: \"content_editor\" });\n\n// 为角色授予权限\nawait grantPermission({ role: \"editor\", permission_id: \"p1\" });\n```\n\n### 6. 管理后台 Hooks\n\n```tsx\nimport { useRoles, usePermissions } from \"@anycms/rbac/admin/hooks\";\n\nfunction RolesPage() {\n  const { roles, loading, createRole, updateRole, deleteRole } = useRoles();\n  // ...\n}\n\nfunction PermissionsPage() {\n  const { permissions, categories, loading, createPermission, deletePermission } = usePermissions();\n  // ...\n}\n```\n\n## 类型\n\n```ts\n// 核心类型\ntype UserRole = string;\ntype Permission = string;\n\n// 内置角色\nconst BUILTIN_ROLES: { USER: 'user'; ADMIN: 'admin'; OPERATOR: 'operator' };\n\n// API 类型（from @anycms/rbac/api）\ninterface Permission { id: string; code: string; name: string; category: string; ... }\ninterface Role { id: string; name: string; description: string; is_system: boolean; ... }\ninterface RoleAssignment { user_id: string; role: string; scope: \"global\" | \"client\"; ... }\n```\n\n## 依赖\n\n仅依赖 `react`，无其他外部依赖。可独立发布使用。\n","readmeFilename":"README.md","_rev":"1-65aa08b94a65999e47bb8bd4314daaa1"}