2016-02-16 2 views
4

Я звоню в sec: role-exists(). Я пытаюсь выяснить, какие разрешения необходимы для предоставления этой возможности кому-то, кроме администратора. Ошибка, которую я возвращаю, подразумевает, что мне нужна привилегия http://marklogic.com/xdmp/privileges/get-role.Как предоставить привилегии http://marklogic.com/xdmp/privileges/get-role?

SEC-PRIVDNE: xdmp:security-assert("http://marklogic.com/xdmp/privileges/get-role", "execute") -- Privilege does not exist: action(http://marklogic.com/xdmp/privileges/get-role), kind(execute) 

Однако, когда я пытаюсь предоставить эту роль, используя учетную запись администратора через секунду: привилегий адд-роли, он говорит мне, что привилегия не существует.

[1.0-ml] SEC-PRIVDNE: (err:FOER0000) Privilege does not exist: action(http://marklogic.com/xdmp/privileges/get-role), kind(execute) 

Любые идеи?

Вот фрагмент кода, который я использую для предоставления, который я запускаю как admin.

(: grant the needed privileges to the role :) 
let $grant_privs := 
xdmp:invoke-function(
    function() { 
    let $required_roles := (
     "http://marklogic.com/xdmp/privileges/create-role", 
     "http://marklogic.com/xdmp/privileges/remove-role", 
     "http://marklogic.com/xdmp/privileges/get-role-ids", 
     "http://marklogic.com/xdmp/privileges/get-role-names", 
     "http://marklogic.com/xdmp/privileges/get-role", 
     "http://marklogic.com/xdmp/privileges/xdmp-invoke-in", 
     "http://marklogic.com/xdmp/privileges/xdmp-invoke" 
    ) 

    return 
     for $r in $required_roles 
     return 
      sec:privilege-add-roles(
      $r, 
      "execute", 
      "auth-lib" 
     ) 
    }, 
    <options xmlns="xdmp:eval"> 
    <database>{ xdmp:security-database() }</database> 
    <transaction-mode>update-auto-commit</transaction-mode> 
    <isolation>different-transaction</isolation> 
    </options> 
) 
+0

Вы можете написать код, который вы используете, чтобы создать эту привилегию? – wst

+0

Я обновил вопрос, включив код. –

ответ

7

На самом деле это ошибка, при которой привилегия не была создана при установке. Это будет исправлено в следующем выпуске, но в промежутке времени вы можете создать его в своей базе данных безопасности вручную.

sec:create-privilege(
    "role-exists", 
    "http://marklogic.com/xdmp/privileges/get-role", 
    "execute", 
    "security") 
+0

Я выполнил это для базы данных безопасности, и я предоставил разрешение на выполнение этой привилегии на соответствующую учетную запись пользователя. Теперь вызов больше не позволяет предоставить разрешение. Но вызов sec: role-exists() всегда возвращает false, хотя роль существует. Есть идеи? –

Смежные вопросы