4

Sitecore 구현에는 영어와 모국어 (예 : 독일어)에 대한 언어 쓰기 권한이 필요한 지점 편집기가 있습니다. 그러나 우리는 콘텐츠 트리에서 특정 분기 에디터가 영어 버전을 편집해서는 안되는 부분이 있지만 기본 언어 버전을 사용해야합니다.Sitecore 언어를 제한하는 방법 콘텐츠 트리의 특정 부분에만 쓰기

특정 예를 들어, 제품 정보 페이지 (예 : 부품 번호)와 일부 현지화 가능 정보 (예 : 설명 필드)가있는 제품 페이지는 필드 레벨 보안을 사용합니다 전역 (부품 번호) 필드를 잠 그려면 독일어 편집기가 예를 들어 독일어 버전의 항목을 만들어 번역 된 현지화 가능 (설명) 텍스트를 넣을 수 있지만 실수로 전환 할 수는 없습니다. 해당 설명의 영어 버전을 업데이트하십시오.

특정 역할에 대해 시스템> 언어에서 언어 읽기/쓰기 설정에 대해 알고 있습니다. 우리는 그 부분을 다루었습니다.

    • 항목 1 (영어 및 독일어 버전에 대한 쓰기 액세스 권한을 가지고 가상의 컨텐츠 에디터 효과적으로 시나리오의 다음과 같은 유형의 작업을 수행 할 수있는 방법이 있다면 내가 대해 궁금 것은 편집기는 영어와 독일어 버전 모두에 대한 쓰기 액세스)
    • ... 하위 항목 1
    • ... 하위 항목이 2
    • 항목이 (편집자는 독일어 버전에 대한 쓰기 액세스 권한을 갖습니다 어떤 제안에 미리 전용)
    • ... 하위 항목 1
    • ... 하위 항목이

감사이야.

답변

5

내가 아는 한, 네이티브 Sitecore 보안 모델은 이와 관련하여 결함이 있습니다. 언어 읽기/쓰기 액세스는 콘텐츠 트리의 특정 부분에 현지화 될 수 없습니다. 즉, 언어를 편집 할 수있는 경우 쓰기 권한이있는 모든 컨텐트 항목에서 언어를 편집 할 수 있습니다.

그러나 saveUi 파이프 라인과 getContentEditorWarnings 파이프 라인을 조합하여 요구 사항을 충족시킬 수 있다고 생각합니다.

당신이 사용자가 현재 언어의 지정된 내용을 편집 할 수 있어야 여부를 확인하는 프로세서가 필요합니다이 파이프 라인에서 saveUi

. 어떻게 구성되고 결정되는지 (XML 구성? 콘텐츠 트리의 한 지점에있는 언어 별 항목에 대한 사용자 액세스) 사용자에게 맡기 겠지만 사용자가 액세스를 거부해야하는 경우 구하다.

public class CheckLanguageWritePermission 
    { 
     public string WorkflowStateID { get; set; } 

     public void Process(SaveArgs args) 
     { 
      Assert.ArgumentNotNull(args, "args"); 
      Assert.IsNotNull(args.Items, "args.Items"); 
      foreach (SaveArgs.SaveItem item in args.Items) 
      { 
       Item item2 = Sitecore.Client.ContentDatabase.Items[item.ID, item.Language]; 
        if (/* user should not have permission*/) 
        { 
         AbortSave(args); 
         return; 
        } 
      } 
     } 

     protected void AbortSave(SaveArgs args) 
     { 
      if (args.HasSheerUI) 
      { 
       SheerResponse.Alert("You do not have permission to edit this item in the current language."); 
       SheerResponse.SetReturnValue("failed"); 
      } 
      args.AbortPipeline(); 
     } 
    } 

getContentEditorWarnings

실제로이 방법 (그냥 저장)와 컨텐츠를 편집에서 사용자를 방지 할 수 있기 때문에, 당신은 아마 많은라는 경고를 제공해야합니다.

public class CheckLanguageWritePermission 
{ 
    // Methods 
    public void Process(GetContentEditorWarningsArgs args) 
    { 
     Item item = args.Item; 
     if (/* user should not have permission*/) 
     { 
      GetContentEditorWarningsArgs.ContentEditorWarning warning = args.Add(); 
      warning.Title = "You do not have permission to edit this item in the current language."; 
      warning.IsExclusive = true; 
     } 
    } 
} 

완벽한 솔루션은 아니지만 바람직하지 않은 콘텐츠 수정을 방지합니다. 버전 관리/워크 플로가 작동중인 경우 addversion 및 item : checkout 항목에 대한 UI 명령을 재정 의하여 새로운 버전을 추가하지 못하도록 할 수 있습니다.

액세스 권한을 결정하는 것이 까다로울 수 있으므로 최선의 방법은 특정 비즈니스 규칙에 따라 달라질 수 있습니다.

관련 문제