2016-10-01 9 views
1

필요한 동작을 얻으려면 내 사용자 권한/권한/역할을 올바르게 설정하는 데 어려움을 겪고 있습니다.콘텐츠를 제한하기 위해 사용자 지정 사용자 권한을 만들지 못했습니다.

MarkLogic 8과 Roxy를 사용하여 응용 프로그램을 만들고 배포합니다.

이 응용 프로그램에는 개별 사용자로 제한되어야하는 내용의 다른 사용자가 있습니다. 그러나 그들은 함께 협력해야하는 프로젝트에도 참여합니다.

나는이 helpful blogdiscussion on github issue 303을 보았지만 아직 제대로 이해하지 못했습니다.

기본 록시 응용 프로그램 사용자 역할 :

<role> 
    <role-name>${app-role}</role-name> 
    <description>A role for users of the ${app-name} application</description> 
    <role-names> 
    </role-names> 
    <permissions> 
    <permission> 
     <capability>execute</capability> 
     <role-name>${app-role}</role-name> 
    </permission> 
    <permission> 
     <capability>update</capability> 
     <role-name>${app-role}</role-name> 
    </permission> 
    <permission> 
     <capability>insert</capability> 
     <role-name>${app-role}</role-name> 
    </permission> 
    <permission> 
     <capability>read</capability> 
     <role-name>${app-role}</role-name> 
    </permission> 
    </permissions> 
    <collections> 
    </collections> 
    <privileges> 
    <privilege> 
     <privilege-name>xdmp:value</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>xdmp:add-response-header</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>xdmp:invoke</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>xdmp:with-namespaces</privilege-name> 
    </privilege> 
    </privileges> 
</role> 

내 사용자 지정 역할 :

<role> 
    <role-name>sccss-user</role-name> 
    <description>sccss default role</description> 
    <role-names> 
    <!-- TODO test which roles we really need --> 
    <!-- 
    <role-name>alert-user</role-name>  
    <role-name>alert-internal</role-name> 
    <role-name>rest-admin</role-name> 
    <role-name>rest-writer-internal</role-name> 
    <role-name>rest-reader</role-name> 
    <role-name>network-access</role-name> 
    <role-name>qconsole-user</role-name> 
    --> 
    <!-- cluey app role for rest api access TODO replace with dedicated api user and role 

    <role-name>${app-role}</role-name> 
    --> 

    </role-names> 
    <permissions> 
    </permissions> 
    <collections> 
    </collections> 
    <privileges> 
    <!-- HK --> 
    <!-- 
    <privilege> 
     <privilege-name>any-uri</privilege-name> 
    </privilege> 
    --> 
    <privilege> 
     <privilege-name>devices-uri</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>any-collection</privilege-name> 
    </privilege> 
    <!-- to make this role have acces to the REST API--> 
    <privilege> 
     <privilege-name>rest-reader</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>rest-writer</privilege-name> 
    </privilege> 
    <!-- TODO test this 
    <privilege> 
     <privilege-name>xdmp:value</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>xdmp:add-response-header</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>xdmp:invoke</privilege-name> 
    </privilege> 
    <privilege> 
     <privilege-name>xdmp:with-namespaces</privilege-name> 
    </privilege> 
    </privileges> 
    --> 
</role> 

내가 테스트하고 이상하지만, 그 설정으로 내가 어떤에 대한 액세스 권한을 얻을 블로그에 설명되어있는 것을 시도 문서, 분명히 휴식 연장 액세스. 사용자에게 {app-role}을 주면 모든 사용자가 '나머지 독자'역할을하기 때문에 사용자가 다른 사용자의 비공개 콘텐츠를 볼 수있는 문제가 발생합니다 ... 그래서 나는 나머지 리더 역할을 사용하지 않고 나머지 독자의 권한을 사용하지 않도록하려면 기본 앱 역할을 사용하십시오.

한 가지 옵션은 제한된 콘텐츠에 대해 document-insert() 권한을 사용하는 것이지만 가능해야합니다 올바른 역할과 특권을 가진 사람이라면 올바르게 설정할 수 있습니다. 맞습니까?

Grtjn의 대답에 repsonse에서 ADDITION

: THX 4 귀하의 의견은, 제가 나머지 역할에 의아해하고 생각합니다. 만약 내가 default roles 보이는 git에 roxy app에 비어있는 것처럼 보이지만, REST app type으로 내 roxy app type을 설정하면 더욱 복잡해진다. 주요 혼란은 REST 엔드 포인트를 사용하기 위해 두 번째 (독립적 인) 역할에 필요한 역할 및 권한입니다. 정확하게 xdmp : (value, add-response-header, invoke etc 등) 권한은 무엇인가?

 <role-name>${app-role}</role-name> 
     <!-- we need this to amp internal privileges--> 
     <role-name>alert-user</role-name>  
     <role-name>alert-internal</role-name> 
     <role-name>rest-admin-internal</role-name> 

그리고 나머지 리더는 권한이나 역할을해야하는 경우 우리는 토론에 들어가 다음 : 내 예에서 사용자는 그/그녀가 다음과 같은 역할을 필요로하는 REST API에 액세스 할 수 있으려면?

그래서 더 구체적인 질문 :

나는 REST 엔드 포인트는 록시 나머지 유형의 응용 프로그램에 의해 생성에 액세스 할 필요가 설정 한 최소 역할/권한은 무엇입니까?

답변

1

나는 여기에 다음과 같은 접근 방식을 복용 권하고 싶습니다 :

하지 시작하는 콘텐츠 액세스를위한 응용 프로그램 실행을 위해 앱 역할을 사용합니다. 따라서 그 역할에서 기본 권한을 제거하고 나머지 리더/나머지 작성자 권한을 부여하고 MLCP 등을 실행하기위한 일부 priv를 부여하십시오.

다음으로 REST 확장 프로그램과 Roxy가 직접 배포하지 않은 프로그램은 모두 문서 권한을 읽고 실행해야합니다. 사용자 정의 코드, SQL-views 또는 스키마와 함께 배포 스키마로로드되지 않은 트리거 및 경고를 생각해보십시오.slush-marklogic-node에서 사용하는 change_permissions 함수는 다음을 처리하는 방법의 예가 될 수 있습니다. https://github.com/marklogic/slush-marklogic-node/pull/298/files#diff-a529d1d70bd21866e1d12eda3a99f7b6R96

개별적으로 액세스 권한을 부여해야하는 컨텐트의 각 부분에 대한 전용 역할이 생성되면이 역할을 수행해야합니다. 한 사용자 만 액세스 할 수있는 문서 집합이 필요한 경우 사용자 별 역할이 필요합니다. 프로젝트 회원 만 액세스 할 수있는 문서 집합이있는 경우 프로젝트 별 역할도 필요합니다. 읽기/쓰기도 구별 할 필요가 있다면 각각에 대해 두 개의 역할을하십시오 (두 명의 사용자, 두 개의 프로젝트 역할). 이러한 역할에는 priv가 없으며 역할을 상속하지 않아야합니다 (해당 읽기 역할을 상속하는 쓰기는 제외).

일단 읽기/쓰기 역할이 있으면 가져올 때 문서 권한에 올바르게 적용하는 방법에 대해 생각할 수 있습니다. 이러한 수준의 복잡성으로 인해 기본 사용 권한을 피하고 명시 적으로 문서 사용 권한을 선택하고 싶을 수 있습니다. xdmp : document-insert, MLCP 및/v1/documents는 모두 명시적인 문서 사용 권한을 가지므로 적절한 양의 제어 권한을 가져야합니다. 상자 ML-config 파일의 록시의 밖으로

ADDITION

참고. REST 유형 응용 프로그램에 대해 올바르게 조정되지 않았습니다. 그래서 slush-marklogic-node 생성기가 ml-config에 패치를 적용하는 이유가 다음과 같습니다. https://github.com/marklogic/slush-marklogic-node/blob/master/slushfile.js#L346

나머지는 REST API에 대한 읽기 액세스 권한, 휴식 판독기 권한 및 REST API에 대한 업데이트 액세스 권한은 다음과 같습니다. 쉬는 작가 priv. REST 확장은 파일 시스템이 아닌 모듈 데이터베이스에서 실행되므로 모듈 액세스가 필요합니다. 위에서 언급 한 change_permissions 함수는이를 수정합니다.

어쨌든 내 일반적인 조언은 앞서 언급 한 것처럼 앱 실행에 app-role을 사용하고 데이터 액세스를 위해 다른 역할을 사용하는 것입니다. 앱을 사용하려는 모든 사용자는 적절한 역할의 데이터 액세스를 제공하는 다른 역할과 함께 app-role을 상속해야합니다.

HTH!

+0

안녕하세요. Grtjn, 제 질문을 좀 더 구체적으로 업데이트했습니다. 그 점에 대해 의견을 나눌 수 있기를 바랍니다. thx –

+0

나는 약간 정교하게 만들었다. 여전히 명확하지 않은 경우 기본 오프라인을 터치합니다. – grtjn