@@ -4742,6 +4742,9 @@ declare function setup:validate-external-security(
47424742declare function setup:create-roles (
47434743 $import-config as element (configuration))
47444744{
4745+ (: get the existing role names from the default security DB :)
4746+ let $existing-role-names := setup:get-existing-role-names ()
4747+
47454748 (: Create all missing roles :)
47464749 for $role in $import-config/sec:roles/sec:role
47474750 let $role-name as xs:string := $role/sec:role-name
@@ -4754,7 +4757,7 @@ declare function setup:create-roles(
47544757 </options>
47554758 return
47564759 (: if the role exists, then don't create it :)
4757- if (setup:get-roles (())/sec: role[sec:role-name = $role-name]) then ()
4760+ if ($existing- role-names[. = $role-name]) then ()
47584761 else
47594762 (
47604763 xdmp:eval (
@@ -4911,6 +4914,9 @@ declare function setup:create-roles(
49114914declare function setup:validate-roles (
49124915 $import-config as element (configuration))
49134916{
4917+ (: get the existing role names from the default security DB :)
4918+ let $existing-roles := setup:get-roles (())
4919+
49144920 for $role in $import-config/sec:roles/sec:role
49154921 let $role-name as xs:string := $role/sec:role-name
49164922 let $description as xs:string? := $role/sec:description
@@ -4921,7 +4927,7 @@ declare function setup:validate-roles(
49214927 let $privileges as element (sec:privilege)* := $role/sec:privileges/sec:privilege
49224928 let $amps as element (sec:amp)* := $role/sec:amps/*
49234929 let $external-names as xs:string* := $role/sec:external-names/sec:external-name
4924- let $match := setup:get -roles(()) /sec:role[sec:role-name = $role-name]
4930+ let $match := $existing -roles/sec:role[sec:role-name = $role-name]
49254931 return
49264932 if ($match) then
49274933 if ($match/sec:role-name != $role-name or
@@ -4964,6 +4970,10 @@ declare function setup:associate-users-with-roles($import-config as element(conf
49644970
49654971declare function setup:create-users ($import-config as element (configuration))
49664972{
4973+ (: get the existing user names from the default security DB :)
4974+ let $existing-user-names := setup:get-existing-user-names ()
4975+
4976+ (: Create all missing users :)
49674977 for $user in $import-config/sec:users/sec:user
49684978 let $user-name as xs:string := $user/sec:user-name
49694979 let $description as xs:string? := $user/sec:description
@@ -4978,7 +4988,7 @@ declare function setup:create-users($import-config as element(configuration))
49784988 <isolation>different-transaction</isolation>
49794989 </options>
49804990 return
4981- if (setup:get-users (())/sec: user[sec:user-name = $user-name]) then
4991+ if ($existing- user-names[. = $user-name]) then
49824992 (
49834993 xdmp:eval (
49844994 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
@@ -5088,6 +5098,9 @@ declare function setup:create-users($import-config as element(configuration))
50885098
50895099declare function setup:validate-users ($import-config as element (configuration))
50905100{
5101+ (: get the existing users from the default security DB :)
5102+ let $existing-users := setup:get-users (())
5103+
50915104 for $user in $import-config/sec:users/sec:user
50925105 let $user-name as xs:string := $user/sec:user-name
50935106 let $description as xs:string? := $user/sec:description
@@ -5096,7 +5109,7 @@ declare function setup:validate-users($import-config as element(configuration))
50965109 let $permissions as element (sec:permission)* := $user/sec:permissions/*
50975110 let $collections as xs:string* := $user/sec:collections/*
50985111 let $external-names as xs:string* := $user/sec:external-names/sec:external-name
5099- let $match := setup:get -users(()) /sec:user[sec:user-name = $user-name]
5112+ let $match := $existing -users/sec:user[sec:user-name = $user-name]
51005113 return
51015114 if ($match) then
51025115 if ($match/sec:description != $description or
@@ -5451,6 +5464,19 @@ declare function setup:get-privilege-by-name($name as xs:string) as element(sec:
54515464 </options>)
54525465};
54535466
5467+ (: Gets the user names from the default security database :)
5468+ declare function setup:get-existing-user-names () as element (sec:user-name)* {
5469+ let $user-names :=
5470+ xdmp:eval (
5471+ 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
5472+ /sec:user' ,
5473+ (),
5474+ <options xmlns = "xdmp:eval" >
5475+ <database>{$default-security}</database>
5476+ </options>)/sec:user-name
5477+ return $user-names
5478+ };
5479+
54545480declare function setup:get-users-by-name ($names as xs:string*) as element (sec:users)? {
54555481 let $ids :=
54565482 for $name in $names
@@ -5530,6 +5556,19 @@ declare function setup:get-user-id($user-name as xs:string) as xs:unsignedLong?
55305556 </options>)
55315557};
55325558
5559+ (: Gets the role names from the default security database :)
5560+ declare function setup:get-existing-role-names () as element (sec:role-name)* {
5561+ let $role-names :=
5562+ xdmp:eval (
5563+ 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
5564+ /sec:role' ,
5565+ (),
5566+ <options xmlns = "xdmp:eval" >
5567+ <database>{$default-security}</database>
5568+ </options>)/sec:role-name
5569+ return $role-names
5570+ };
5571+
55335572declare function setup:get-roles-by-name ($roles as xs:string*) as element (sec:roles)? {
55345573 let $ids :=
55355574 for $role in $roles
0 commit comments