Pundit을 사용하여 GraphQL Rails에서 필드 인증 입력
여전히 오픈 소스 버전에서 메서드
authorized?
를 제공하지만 수동으로 수행해야 합니다. 현장 인증here에 대해 자세히 알아볼 수 있습니다.Pundit은 Rails 애플리케이션을 위한 훌륭한 객체 지향 인증입니다. 시스템의 현재 요구 사항에 따라 권한 부여 논리가 시간에 따라 변경될 수 있도록 권한 부여 논리를 컨트롤러에서 분리하는 데 도움이 됩니다.
현장 승인
GraphQL 레일에서 우리는 일부 필드가 모든 사용자가 아닌 일부 특정 사용자에게만 표시되기를 원합니다. 여기에서 우리는 성공하면 유형의 필드를 먼저 승인한 다음 유형에 따라 필드의 값을 표시하고 그렇지 않으면
nil
.나는 pundit gem이 확실히 GraphQL과 함께 코드에 설치되고 초기화되었다고 가정합니다.
사용자가 게시물을 가지고 있고 게시물의 소유자만 게시물의 조회수를 볼 수 있는 예를 들어 보겠습니다. 그러나 graphql에는 하나의 게시물 유형이 있으므로 소유자 이외의 사람이 해당 필드에 액세스할 수 있습니다. 따라서 게시물 소유자에게만 필드를 승인합니다.
# app/policies/post_policy.rb
class PostPolicy < ApplicationPolicy
# only if user is the owner of the post
def owner?
user.present? && record.user == user
end
class Scope < Scope
def resolve
scope.all
end
end
end
소유자 역할로 게시물 정책을 정의했으므로 이제 보기 필드 인증 수로 게시물 유형을 정의합니다.
# app/graphql/types/post_type.rb
module Types
class PostType < Types::BaseObject
field :id, ID, null: false
# .... remaining fields
field :number_of_views, Integer, null: true, description: 'number of times user has viewed your post' do
def authorized?(object, args, context)
Pundit.policy(context[:current_user], object)&.owner?
end
end
# resolvers
def number_of_views
object.views.count
end
end
end
authorized?
는 참 또는 거짓을 반환합니다. 따라서 인증에 실패하면 nil
가 표시되고 그렇지 않으면 값이 표시됩니다. 따라서 향후 owner?
정의를 변경해야 하는 경우 쉽게 수행할 수 있습니다. 또한 Pundit 정책에서 동일한 메서드 이름number_of_views
을 생성하여 Pundit 정책에서 흐름을 완전히 제한할 수 있습니다.행복한 코딩!
Reference
이 문제에 관하여(Pundit을 사용하여 GraphQL Rails에서 필드 인증 입력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sulmanweb/type-field-authorization-in-graphql-rails-with-pundit-1hff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)