我需要一些授权方面的帮助。到目前为止,我试图通过内部导轨授权与设计相结合来解决它。 我有一个发布请求的用户。如果这个请求是私有的,那么只有一组"读者"可以查看和回答请求。 (这是第一名)
然后用户给读者的答案评分。这应该只对收到答案的用户和读者来说是可以访问的。谁给了答案。
到目前为止,我使用以下内容来限制对隐藏请求的访问:
before_filter :require_reader!, only: [:open_requests]
但是如果请求没有被隐藏,那么仍然只有读者应该能够回答请求(但是所有人都能看到它)。在这里,我不知道如何管理这个。任何想法?
继续......我无法解决第二个问题(评级只能是那个放置请求的人和读者)。 这里有什么想法吗?
cancancan可能是一种选择吗?
最佳witali
答案 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中定义它。