为路由添加授权

Adding authorization to routes

我似乎找不到一个很好的例子。例如,我有一个 TicketController

我在 routes.rb 中定义了一个工单资源。

您只需以客户身份登录即可获取工单,但您必须以管理员身份登录才能PUT工单。

我目前在控制器级别执行此操作。我有一个 before_action 用于检查您是以客户还是管理员身份登录的某些控制器方法。

我想知道执行此操作的正确方法是什么。我认为理想情况下,我可能需要对特定资源进行特定操作的特定授权。例如,工单资源 GET 操作只需要以客户身份登录,而 PUT 操作只有在您是管理员时才能发生。

你知道宝石 rolify and CanCanCan 吗?

我认为它们可以帮助您在一个地方管理资源授权,而不必在每个控制器中都这样做。

使用 cancan gem is a common way to manage user authorizations on different resources. You can go through this railscast,其中涵盖了使用此 gem 的基础知识。

注意:Cancan gem 已经很久没有更新了,所以建议使用 cancancan,它具有相似的功能和语法,但得到了积极的支持和更新。