在哪里合适的地方提出权限谓词?

我学到/推断出以下内容:

  • Guardian 确实是封装了 “用户被允许做什么?” 的东西(一个 Guardian 实例也有一个 User 实例。)
  • 因此,权限谓词的正确位置就是 Guardian 上的一个方法(lib/guardian.rb)。
    • 如果该方法是“用户能否对 Xxxx 对象执行 Z 操作?”,那么它可能属于 XxxxGuardian mixin 文件之一(lib/guardian/...)。
    • 否则,它就属于基础 Guardian 定义。
  • ApplicationController 管理一个反映当前请求/客户端的 guardian 属性,并将其作为 scope 提供给序列化器,因此当前的 Guardian 在需要时可用(除非它不可用[1])。
  • 有些地方没有现成的 Guardian,通常是在系统运行的后端任务中,但如果你有一个“正在操作的用户”的句柄(例如,收件用户,在生成电子邮件通知时),你可以即时创建一个合适的 guardian:Guardian.new(the_user)

  1. ↩︎