필드 레벨 편집 구현
이 페이지의 내용
$redact
파이프라인 연산자 는 문서 자체에 저장된 정보를 기반으로 문서의 내용을 제한합니다.
액세스 기준 데이터를 저장하려면 문서 및 내장된 문서에 필드를 추가하세요. 동일한 데이터에 대한 액세스 수준의 여러 조합을 허용하려면 액세스 필드를 여러 배열 중 한 배열로 설정하는 것이 좋습니다. 각 배열 요소에는 해당 세트를 가진 사용자가 데이터에 액세스할 수 있도록 허용하는 필수 세트가 포함됩니다.
그런 다음 db.collection.aggregate()
작업에 $redact
단계를 포함하여 데이터를 보는 데 필요한 액세스 권한에 따라 결과 데이터의 콘텐츠를 제한합니다.
구문 및 관련 시스템 변수, 추가 예시 등 $redact
파이프라인 연산자에 관한 자세한 내용은 $redact
에서 확인하세요.
절차
예를 들어 forecasts
컬렉션에는 tags
필드에 따라 데이터를 보는 데 필요한 액세스 수준이 결정되는 다음 형식의 문서가 포함되어 있습니다.
{ _id: 1, title: "123 Department Report", tags: [ [ "G" ], [ "FDW" ] ], year: 2014, subsections: [ { subtitle: "Section 1: Overview", tags: [ [ "SI", "G" ], [ "FDW" ] ], content: "Section 1: This is the content of section 1." }, { subtitle: "Section 2: Analysis", tags: [ [ "STLW" ] ], content: "Section 2: This is the content of section 2." }, { subtitle: "Section 3: Budgeting", tags: [ [ "TK" ], [ "FDW", "TGE" ] ], content: { text: "Section 3: This is the content of section3.", tags: [ [ "HCS"], [ "FDW", "TGE", "BX" ] ] } } ] }
각 문서에 대해 tags
필드에는 데이터를 보는 데 필요한 다양한 액세스 그룹이 포함되어 있습니다. 예를 들어, [ [ "G" ], [
"FDW", "TGE" ] ]
값은 사용자가 데이터를 보려면 액세스 수준 ["G"]
또는 [ "FDW", "TGE" ]
모두가 필요함을 지정할 수 있습니다.
"FDW"
또는 "TGE"
태그가 지정된 정보만 볼 수 있는 액세스 권한을 가진 사용자를 생각해 보세요. 이 사용자에 대해 2014
년이 포함된 모든 문서에 대해 쿼리를 실행하려면 다음과 같이 $redact
단계를 포함합니다.
var userAccess = [ "FDW", "TGE" ]; db.forecasts.aggregate( [ { $match: { year: 2014 } }, { $redact: { $cond: { if: { $anyElementTrue: { $map: { input: "$tags" , as: "fieldTag", in: { $setIsSubset: [ "$$fieldTag", userAccess ] } } } }, then: "$$DESCEND", else: "$$PRUNE" } } } ] )
집계 작업은 다음과 같은 '편집된' 문서를 반환합니다.
{ "_id" : 1, "title" : "123 Department Report", "tags" : [ [ "G" ], [ "FDW" ] ], "year" : 2014, "subsections" : [ { "subtitle" : "Section 1: Overview", "tags" : [ [ "SI", "G" ], [ "FDW" ] ], "content" : "Section 1: This is the content of section 1." }, { "subtitle" : "Section 3: Budgeting", "tags" : [ [ "TK" ], [ "FDW", "TGE" ] ] } ] }