SuperAPI AI 工具集

authorization

通用与其它

查看项目

更新于 10-15 21:41

技能介绍

用途:在 AdonisJS + Inertia 应用中实现基于角色的访问控制(RBAC),构建在 AdonisJS Bouncer 之上,不依赖外部 RBAC 库。

主要能力:权限集中在 users 模块下的 PERMISSIONS 常量,命名格式为 <mod>.<action>(如 users.create、tokens.view_list);角色 slug 在 ROLES 常量,并配 ROLE_WEIGHTS 权重用于 mainRole() 显示排序;角色自身权限以 JSON 列存在 Role 模型上(role.permissions)。WithRoles mixin 与 withAuthFinder 一起组合进 User,提供 assignRole/assignRoles/syncRoles/revokeRole/revokeRoles、hasRole/hasPermission、getRoleNames/getPermissions/preloadedRoles。策略类继承 BasePolicy,位于 app/<mod>/policies/<entity>_policy.ts,每个受控动作一个方法,签名 currentUser 在前、资源在后,返回 boolean 或 AuthorizerResponse。

使用方式:在控制器中先于校验调用 await bouncer.with(EntityPolicy).authorize('methodName', resource?),拒绝时抛 403(JSON)或 302 回退(HTML/Inertia);所有变更路由(POST/PUT/PATCH/DELETE)都必须经 Bouncer 策略把关。前端由 Inertia 中间件计算 can: GlobalPermissions 对象并在每次请求共享,用 useCan() 读取。新增权限为两步:在 PERMISSIONS 加条目并在受控处引用;新增角色为配置加种子。升级防护包括 requireManageRoles、requireManageRolesIfEscalating 与 AdminLockoutException(阻止用户移除自己的 admin 角色)。测试可用 withRole、withPermissions 辅助函数,覆盖未认证、已认证但无权限、已授权三条路径。

限制与注意:不要硬编码角色名或权限字符串,应使用 ROLES/PERMISSIONS 常量;不要因校验器已检查而跳过策略调用,校验器只查载荷形状不查权限;前端 gating 只是 UX,后端策略必须镜像检查;新增权限后勿忘种子,否则无人真正拥有。资料未提供具体安装命令、收费与平台信息。