SuperAPI AI 工具集

implement-authorization

通用与其它

查看项目

更新于 10-15 22:17

技能介绍

用途:在 Rails 项目中实现或审查授权逻辑,覆盖 Pundit 与 CanCanCan 两种主流方案。Pundit 适合按资源编写显式策略类、规则较复杂的场景;CanCanCan 适合集中式 Ability 类、基于角色的简单权限。

主要能力:先检查项目已有的授权框架并复用,仅在任务需要且项目约定允许时才新增 gem;仅在缺少受支持框架且允许生成器时运行 rails g pundit:install 或 rails g cancan:ability;定义策略类或 Ability 类,避免在控制器内联授权逻辑;在控制器动作中调用 authorize @record(Pundit)或 authorize! :action, @record(CanCanCan);用 policy_scope(Model) 或 accessible_by(current_ability) 处理索引查询;为 admin、owner、guest 等角色编写策略与请求测试。

使用方式:按工作流依次检查现有授权、按需生成基础文件、定义策略或能力、在控制器中授权、验证未授权动作会抛出 Pundit::NotAuthorizedError 或 CanCan::AccessDenied、对查询做作用域限制、覆盖全部角色测试。验证时使用持久化记录(如 User.create!),不要用未保存对象。

限制与排错:Pundit::NotDefinedError 表示缺少策略类,需创建继承 ApplicationPolicy 的策略;Pundit::AuthorizationNotPerformedError 表示控制器未调用 authorize,可加 after_action :verify_authorized;CanCan::AccessDenied 意外抛出时,可在控制台用 current_ability.can?(:action, @record) 调试规则。输出默认使用英文,除非明确要求其他语言。完整示例与格式模板见 EXAMPLES.md、references/workflow.md、references/output-style.md。