저는 Pundit gem을 사용하여 current_user 이외의 사용자에게 속한 색인 페이지에 대한 액세스를 방지하는 방법을 알아 내려고 노력하고 있습니다.Pundit Gem 색인 페이지 액세스 금지
예제는 current_user로 결과를 범위 지정하는 방법에 대해서만 설명하지만 current_user가 레코드의 소유자가 아닌 경우 실제로 페이지 자체에 대한 액세스를 실제로 금지하는 방법은 없습니다.
어떤 도움을
감사
저는 Pundit gem을 사용하여 current_user 이외의 사용자에게 속한 색인 페이지에 대한 액세스를 방지하는 방법을 알아 내려고 노력하고 있습니다.Pundit Gem 색인 페이지 액세스 금지
예제는 current_user로 결과를 범위 지정하는 방법에 대해서만 설명하지만 current_user가 레코드의 소유자가 아닌 경우 실제로 페이지 자체에 대한 액세스를 실제로 금지하는 방법은 없습니다.
어떤 도움을
감사
은 아마 당신이 뭔가를 원하는 감사? (클래스 MODELNAME 용)
# /policies/model_name_policy.rb
class ModelNamePolicy
attr_reader :current_user, :resource
def initialize(current_user, resource)
@current_user = current_user
@resource = resource
end
def index?
current_user.authorized_to_edit?(resource)
end
end
# /models/user.rb
class User < ActiveRecord::Base
def authorized_to_edit?(resource)
admin? | (id == resource.created_by) # Or whatever method you want to call on your model to determine ownership
end
end
편집 : 당신은 또한 정책을 호출하는 컨트롤러에서 authorize
를 호출 할 필요가 있습니다.
IMO : Pundit의 아이디어는 모델 내에 권한 논리를 포함시키지 않는 것입니다. –
다른 제안이 있습니다. 'authorized_to_edit? '가 많은 모델의 정책에서 사용된다면, 어디에 두겠습니까? – moveson
'authorize_to_edit'가 각 정책에 대해 각 정책에 정의되어야합니다. 모델 중 일부가 동일한 인증 로직을 공유하는 경우 중복 코드를 피하기 위해 클래스/믹스 인을 사용할 수 있습니다. –
나는 색인 페이지가 어떤 사용자에게도 속하지 않는다고 생각할 것이다. 관리자에게만 액세스를 제한하는 것이 목표입니까? – moveson
@moveson 특정 사용자의 색인 페이지입니다. 페이지가 있습니다. 아마도 그것은 인덱스 페이지가 아니라 user_posts와 같은 사용자 컨트롤러에서 별도의 작업이되어야합니다. – Robbo
그것은 나에게 더 이해할 수 있습니다. 아래에 설명 된 패턴이 작동해야합니다. 'index? '를'user_posts?'로 대체하면됩니다. 'authorized_to_edit? '논리를 어디에 둘 것인지에 대한 대안을 제시하기 위해 @Fede Bonisconti의 코멘트를보십시오. 사용자 모델이 아닌 다른 곳에 포함 시키려면'current_user.authorized_to_edit' 대신'authorized_to_edit? (current_user)'를 호출해야합니다. – moveson