@@ -4742,6 +4742,10 @@ 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+ return
4748+
47454749 (: Create all missing roles :)
47464750 for $role in $import-config/sec:roles/sec:role
47474751 let $role-name as xs:string := $role/sec:role-name
@@ -4754,7 +4758,7 @@ declare function setup:create-roles(
47544758 </options>
47554759 return
47564760 (: if the role exists, then don't create it :)
4757- if (setup:get-roles (())/sec: role[sec:role-name = $role-name]) then ()
4761+ if ($existing- role-names[. = $role-name]) then ()
47584762 else
47594763 (
47604764 xdmp:eval (
@@ -4911,6 +4915,10 @@ declare function setup:create-roles(
49114915declare function setup:validate-roles (
49124916 $import-config as element (configuration))
49134917{
4918+ (: get the existing role names from the default security DB :)
4919+ let $existing-role-names := setup:get-existing-role-names ()
4920+ return
4921+
49144922 for $role in $import-config/sec:roles/sec:role
49154923 let $role-name as xs:string := $role/sec:role-name
49164924 let $description as xs:string? := $role/sec:description
@@ -4921,7 +4929,7 @@ declare function setup:validate-roles(
49214929 let $privileges as element (sec:privilege)* := $role/sec:privileges/sec:privilege
49224930 let $amps as element (sec:amp)* := $role/sec:amps/*
49234931 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]
4932+ let $match := $existing- role-names[. = $role-name]
49254933 return
49264934 if ($match) then
49274935 if ($match/sec:role-name != $role-name or
@@ -4964,6 +4972,11 @@ declare function setup:associate-users-with-roles($import-config as element(conf
49644972
49654973declare function setup:create-users ($import-config as element (configuration))
49664974{
4975+ (: get the existing user names from the default security DB :)
4976+ let $existing-user-names := setup:get-existing-user-names ()
4977+ return
4978+
4979+ (: Create all missing users :)
49674980 for $user in $import-config/sec:users/sec:user
49684981 let $user-name as xs:string := $user/sec:user-name
49694982 let $description as xs:string? := $user/sec:description
@@ -4978,7 +4991,7 @@ declare function setup:create-users($import-config as element(configuration))
49784991 <isolation>different-transaction</isolation>
49794992 </options>
49804993 return
4981- if (setup:get-users (())/sec: user[sec:user-name = $user-name]) then
4994+ if ($existing- user-names[. = $user-name]) then
49824995 (
49834996 xdmp:eval (
49844997 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
@@ -5088,6 +5101,10 @@ declare function setup:create-users($import-config as element(configuration))
50885101
50895102declare function setup:validate-users ($import-config as element (configuration))
50905103{
5104+ (: get the existing user names from the default security DB :)
5105+ let $existing-user-names := setup:get-existing-user-names ()
5106+ return
5107+
50915108 for $user in $import-config/sec:users/sec:user
50925109 let $user-name as xs:string := $user/sec:user-name
50935110 let $description as xs:string? := $user/sec:description
@@ -5096,7 +5113,7 @@ declare function setup:validate-users($import-config as element(configuration))
50965113 let $permissions as element (sec:permission)* := $user/sec:permissions/*
50975114 let $collections as xs:string* := $user/sec:collections/*
50985115 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]
5116+ let $match := $existing- user-names[. = $user-name]
51005117 return
51015118 if ($match) then
51025119 if ($match/sec:description != $description or
@@ -5451,6 +5468,19 @@ declare function setup:get-privilege-by-name($name as xs:string) as element(sec:
54515468 </options>)
54525469};
54535470
5471+ (: Gets the user names from the default security database :)
5472+ declare function setup:get-existing-user-names () as element (sec:user-name)* {
5473+ let $user-names :=
5474+ xdmp:eval (
5475+ 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
5476+ /sec:user' ,
5477+ (),
5478+ <options xmlns = "xdmp:eval" >
5479+ <database>{$default-security}</database>
5480+ </options>)/sec:user-name
5481+ return $user-names
5482+ };
5483+
54545484declare function setup:get-users-by-name ($names as xs:string*) as element (sec:users)? {
54555485 let $ids :=
54565486 for $name in $names
@@ -5530,6 +5560,19 @@ declare function setup:get-user-id($user-name as xs:string) as xs:unsignedLong?
55305560 </options>)
55315561};
55325562
5563+ (: Gets the role names from the default security database :)
5564+ declare function setup:get-existing-role-names () as element (sec:role-name)* {
5565+ let $role-names :=
5566+ xdmp:eval (
5567+ 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
5568+ /sec:role' ,
5569+ (),
5570+ <options xmlns = "xdmp:eval" >
5571+ <database>{$default-security}</database>
5572+ </options>)/sec:role-name
5573+ return $role-names
5574+ };
5575+
55335576declare function setup:get-roles-by-name ($roles as xs:string*) as element (sec:roles)? {
55345577 let $ids :=
55355578 for $role in $roles
0 commit comments