0

我需要一些关于授权的帮助。到目前为止,我正试图通过内部 rails 授权与设计相结合来解决它。我有一个用户正在发布请求。如果此请求是私人的,则只有一组“读者”可以看到并回答该请求。(这是第一名)

然后用户给读者的答案打分。这应该只有收到答案的用户和给出答案的“读者”才能访问。

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

 before_filter :require_reader!, only: [:open_requests]

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

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

cancancan可能是一种选择吗?

最好的维塔利

4

1 回答 1

0

您所做的并不完全遵循通常使用 Railsbricks 等工具设置的“管理员”模式。“管理员”权限模式通常是一整套仅供管理员使用的操作/视图,因此整个控制器或控制器系列通常具有 :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 中定义它。

于 2015-02-10T17:08:37.820 回答