使用Devise和多个级别进行授权

时间:2015-02-03 21:21:24

标签: devise authorization ruby-on-rails-4.2

我需要一些授权方面的帮助。到目前为止,我试图通过内部导轨授权与设计相结合来解决它。 我有一个发布请求的用户。如果这个请求是私有的,那么只有一组"读者"可以查看和回答请求。 (这是第一名)

然后用户给读者的答案评分。这应该只对收到答案的用户和读者来说是可以访问的。谁给了答案。

到目前为止,我使用以下内容来限制对隐藏请求的访问:

 before_filter :require_reader!, only: [:open_requests]

但是如果请求没有被隐藏,那么仍然只有读者应该能够回答请求(但是所有人都能看到它)。在这里,我不知道如何管理这个。任何想法?

继续......我无法解决第二个问题(评级只能是那个放置请求的人和读者)。 这里有什么想法吗?

cancancan可能是一种选择吗?

最佳

witali

1 个答案:

答案 0 :(得分:0)

您正在做的事情并不完全遵循“管理员”的规定。通常使用Railsbricks等工具设置的模式。 ' admin'权限模式通常是一组仅供管理员使用的操作/视图,因此整个Controller或控制器系列通常具有:require_admin!在每个操作和视图之前应用过滤器。非常简单的权限逻辑,它仅取决于用户和视图。

相反,您所拥有的是具有权限的视图,这些权限取决于您的对象的状态以及用户的状态和视图。因此,您必须编写自己的过滤器,而不是使用' require_reader!'。

例如,您可能有一个RequestsController,您可以添加它:

  before_action :must_be_able_to_view_request, except: [:index, :new, :create]

然后在控制器中定义该过滤器:

  private
  def must_be_able_to_view_request
    if !current_user.is_reader? && !@request.ispublic
       head :forbidden
    end
  end

如果您需要在其他控制器中使用相同的过滤器,则可以在ApplicationController中定义它。