본문 바로가기

배움의 즐거움/프로그래밍

(30) Graphql-ruby - 범위설정(scoping)

반응형




Scoping


Scoping 은 권한부여와 함께 사용하는 것을 고려해볼만 하다. "이 사용자가 이걸 볼 수 있어?" 라고 체크하는 대신에 scoping 은 아이템 리스트를 현재 사용자와 context 를 적합한 하위 집합으로 필터링 한다. 결과 하위집합은 정상적으로 권한부여가 되고, 각 아이템은 권한부여 검사를 통과해야 한다.


비슷한 기능으로는 Pundit scopes와 Cancan’의 .accessible_by.를 참고하자.


scope: option


필드는 스코핑을 가능하게 하거나(또는 불가능하게 하기 위해) scope: 옵션을 받는다.

field :products, [Types::Product], scope: true
# Or
field :all_products, [Types::Product], scope: false

list 와 connection 필드에서는, scope: true 가 기본이다. 다른 모든 필드에서는 scope: false 가 기본 설정이다. 이는 scope: 옵션을 통해서 오버라이드 가능하다.


.scope_items(items, ctx) method


타입 클래스는 .scope_items(items, ctx) 를 구현할 수 있다. 이 메서드는 필드가 scope: true 를 가지고 있을 때 호출된다.

field :products, [Types::Product] #  `scope: true` 를 기본으로 가지고 있다


위는 다음을 호출한다.

class Types::Product < Types::BaseObject
  def self.scope_items(items, context)
    # 아이템을 여기서 필터한다
  end
end

이 메서드는 현재 context 에 맞는 적당한 아이템을 가진 새로운 리스트를 리턴해야만 한다.


* 해당 글은 번역기 돌리다가 크롬 번역기 말도 안되는 해석에 지친 본인이 나중에 참고할 의도로 대충대충 발로 해석한 것이니 참고용으로만 사용하시길 바랍니다.

* 출처: http://graphql-ruby.org/authorization/scoping.html


반응형