Difference between revisions of "User Module"

From BaseX Documentation
Jump to navigation Jump to search
m (Text replacement - "syntaxhighlight" to "pre")
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
This [[Module Library|XQuery Module]] contains functions for creating and administering database users. The [[User Management]] article gives more information on database users and permissions.
+
This [[Module Library|XQuery Module]] contains functions for creating and administering database users. The [[User Management]] article provides more information on database users and permissions.
  
 
=Conventions=
 
=Conventions=
Line 11: Line 11:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:current||xs:string}}<br/>
+
|<pre>user:current() as xs:string</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
|Returns the name of the currently logged in user.
+
|Returns the name of the currently logged-in user.
 
|- valign="top"
 
|- valign="top"
 
| '''Examples'''
 
| '''Examples'''
Line 26: Line 26:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:list||xs:string*}}<br/>
+
|<pre>user:list() as xs:string*</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
|Returns the names of all registered users that are visible to the current user.
+
|Returns the names of all registered users who are visible to the current user.
 
|- valign="top"
 
|- valign="top"
 
| '''Examples'''
 
| '''Examples'''
Line 41: Line 41:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:list-details||element(user)*}}<br/>{{Func|user:list-details|$name as xs:string|element(user)*}}<br/>
+
|<pre>user:list-details(
 +
  $name as xs:string := ()
 +
) as element(user)*</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
|Returns an element sequence, containing all registered users that are visible to the current user.<br/>In addition to the {{Command|SHOW USERS}} command, encoded password strings and database permissions will be output. A user {{Code|$name}} can be specified to filter the results in advance.
+
|Returns an element sequence, containing all registered users who are visible to the current user.<br/>In addition to the {{Command|SHOW USERS}} command, encoded password strings and database permissions will be output. A user {{Code|$name}} can be specified to filter the results in advance.
 
|- valign="top"
 
|- valign="top"
 
| '''Examples'''
 
| '''Examples'''
 
|
 
|
 
* After a fresh installation, {{Code|user:list-details()}} returns output similar to the following one:
 
* After a fresh installation, {{Code|user:list-details()}} returns output similar to the following one:
<syntaxhighlight lang="xml">
+
<pre lang="xml">
 
<user name="admin" permission="admin">
 
<user name="admin" permission="admin">
 
   <password algorithm="digest">
 
   <password algorithm="digest">
Line 60: Line 62:
 
   </password>
 
   </password>
 
</user>
 
</user>
</syntaxhighlight>
+
</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Errors'''
 
| '''Errors'''
Line 70: Line 72:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:exists|$name as xs:string|xs:boolean}}<br/>
+
|<pre>user:exists(
 +
  $name as xs:string
 +
) as xs:boolean</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 88: Line 92:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:check|$name as xs:string, $password as xs:string|empty-sequence()}}<br/>
+
|<pre>user:check(
 +
  $name     as xs:string,
 +
  $password as xs:string
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 106: Line 113:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:info||element(info)}}<br/>{{Func|user:info|$name as xs:string|element(info)}}
+
|<pre>user:info(
 +
  $name as xs:string := ()
 +
) as element(info)</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 119: Line 128:
 
=Updates=
 
=Updates=
  
'''Important note:''' All functions in this section are ''updating functions'': they will not be immediately executed, but queued on the [[XQuery Update#Pending Update List|Pending Update List]], which will be processed after the actual query has been evaluated. This means that the order in which the functions are specified in the query does usually not reflect the order in which the code will be evaluated.
+
'''Important note:''' All functions in this section are ''updating functions'': they will not be immediately executed, but queued on the [[XQuery Update#Pending Update List|Pending Update List]], which will be processed after the actual query has been evaluated. This means that the order in which the functions are specified in the query usually does not reflect the order in which the code will be evaluated.
  
 
==user:create==
 
==user:create==
Line 125: Line 134:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:create|$name as xs:string, $password as xs:string|empty-sequence()}}<br/>{{Func|user:create|$name as xs:string, $password as xs:string, $permissions as xs:string*|empty-sequence()}}<br/>{{Func|user:create|$name as xs:string, $password as xs:string, $permissions as xs:string*, $patterns as xs:string*|empty-sequence()}}<br/>{{Func|user:create|$name as xs:string, $password as xs:string, $permissions as xs:string*, $patterns as xs:string*, $info as element(info)|empty-sequence()}}
+
|<pre>user:create(
 +
  $name         as xs:string,
 +
  $password     as xs:string,
 +
  $permissions as xs:string*     := (),
 +
  $patterns    as xs:string*     := (),
 +
  $info         as element(info) := ()
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 148: Line 163:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:grant|$name as xs:string, $permissions as xs:string*|empty-sequence()}}<br/>{{Func|user:grant|$name as xs:string, $permissions as xs:string*, $patterns as xs:string*|empty-sequence()}}
+
|<pre>user:grant(
 +
  $name         as xs:string,
 +
  $permissions as xs:string*,
 +
  $patterns     as xs:string* := ()
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 167: Line 186:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:drop|$name as xs:string|empty-sequence()}}<br/>{{Func|user:drop|$name as xs:string, $patterns as xs:string*|empty-sequence()}}
+
|<pre>user:drop(
 +
  $name     as xs:string,
 +
  $patterns as xs:string* := ()
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 186: Line 208:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:alter|$name as xs:string, $newname as xs:string|empty-sequence()}}
+
|<pre>user:alter(
 +
  $name     as xs:string,
 +
  $newname as xs:string
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 204: Line 229:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:password|$name as xs:string, $password as xs:string|empty-sequence()}}
+
|<pre>user:password(
 +
  $name     as xs:string,
 +
  $password as xs:string
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 222: Line 250:
 
{| width='100%'
 
{| width='100%'
 
|- valign="top"
 
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|user:update-info|$info as element(info)|empty-sequence()}}<br/>{{Func|user:update-info|$info as element(info), $name as xs:string|empty-sequence()}}
+
|<pre>user:update-info(
 +
  $info as element(info),
 +
  $name as xs:string     := ()
 +
) as empty-sequence()</pre>
 
|- valign="top"
 
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
Line 231: Line 262:
 
|
 
|
 
* Store initial groups information:
 
* Store initial groups information:
<syntaxhighlight lang="xquery">
+
<pre lang='xquery'>
 
user:update-info(element info {
 
user:update-info(element info {
 
   for $group in ('editor', 'author', 'writer')
 
   for $group in ('editor', 'author', 'writer')
 
   return element group { $group }
 
   return element group { $group }
 
})
 
})
</syntaxhighlight>
+
</pre>
 
* Add a group to a specific user:
 
* Add a group to a specific user:
<syntaxhighlight lang="xquery">
+
<pre lang='xquery'>
 
user:update-info(<info group='editor'/>, 'john')
 
user:update-info(<info group='editor'/>, 'john')
</syntaxhighlight>
+
</pre>
 
|}
 
|}
  

Latest revision as of 17:39, 1 December 2023

This XQuery Module contains functions for creating and administering database users. The User Management article provides more information on database users and permissions.

Conventions[edit]

All functions and errors in this module are assigned to the http://basex.org/modules/user namespace, which is statically bound to the user prefix.

Read Operations[edit]

user:current[edit]

Signature
user:current() as xs:string
Summary Returns the name of the currently logged-in user.
Examples
  • If the GUI or the standalone mode is used, user:current() always returns admin.

user:list[edit]

Signature
user:list() as xs:string*
Summary Returns the names of all registered users who are visible to the current user.
Examples
  • After a fresh installation, user:list() will only return admin.

user:list-details[edit]

Signature
user:list-details(
  $name  as xs:string  := ()
) as element(user)*
Summary Returns an element sequence, containing all registered users who are visible to the current user.
In addition to the SHOW USERS command, encoded password strings and database permissions will be output. A user $name can be specified to filter the results in advance.
Examples
  • After a fresh installation, user:list-details() returns output similar to the following one:
<user name="admin" permission="admin">
  <password algorithm="digest">
    <hash>304bdfb0383c16f070a897fc1eb25cb4</hash>
  </password>
  <password algorithm="salted-sha256">
    <salt>871602799292195</salt>
    <hash>a065ca66fa3d6da5762c227587f1c8258c6dc08ee867e44a605a72da115dcb41</hash>
  </password>
</user>
Errors unknown: The specified username is unknown.

user:exists[edit]

Signature
user:exists(
  $name  as xs:string
) as xs:boolean
Summary Checks if a user with the specified $name exists.
Examples
  • user:exists('admin') will always yield true.
Errors name: The specified username is invalid.

user:check[edit]

Signature
user:check(
  $name      as xs:string,
  $password  as xs:string
) as empty-sequence()
Summary Checks if the specified user and password is correct. Raises errors otherwise.
Examples
  • user:check('admin', ) will raise an error if the password of the admin user is a non-empty string.
Errors name: The specified username is invalid.
unknown: The specified user does not exist.
password: The specified password is wrong.

user:info[edit]

Signature
user:info(
  $name  as xs:string  := ()
) as element(info)
Summary Returns an info element, which may contain application-specific data. If a user $name is supplied, a user-specific element is returned. By default, the returned element has no contents. It can be modified via user:update-info.
Examples
  • After a fresh installation, user:info() returns <info/>.

Updates[edit]

Important note: All functions in this section are updating functions: they will not be immediately executed, but queued on the Pending Update List, which will be processed after the actual query has been evaluated. This means that the order in which the functions are specified in the query usually does not reflect the order in which the code will be evaluated.

user:create[edit]

Signature
user:create(
  $name         as xs:string,
  $password     as xs:string,
  $permissions  as xs:string*     := (),
  $patterns     as xs:string*     := (),
  $info         as element(info)  := ()
) as empty-sequence()
Summary Creates a new user with the specified $name, $password, and $permissions:
  • Local permissions are granted with non-empty glob $patterns.
  • An $info element with application-specific information can be supplied.
  • The default global permission (none) can be overwritten with an empty pattern or by omitting the last argument.
  • Existing users will be overwritten.
Examples
  • user:create('John', '7e$j#!1', 'admin') creates a new user 'John' with admin permissions.
  • user:create('Jack', 'top!secret', 'read', 'index*') creates a new user 'Jack' with read permissions for databases starting with the letters 'index'.
Errors name: The specified username is invalid.
permission: The specified permission is invalid.
admin: The "admin" user cannot be modified.
logged-in: The specified user is currently logged in.
update: The operation can only be performed once per user or database pattern.

user:grant[edit]

Signature
user:grant(
  $name         as xs:string,
  $permissions  as xs:string*,
  $patterns     as xs:string*  := ()
) as empty-sequence()
Summary Grants global or local $permissions to a user with the specified $name. Local permissions are granted with non-empty glob $patterns.
Examples
  • user:grant('John', 'create') grants create permissions to the user 'John'.
  • user:grant('John', ('read','write'), ('index*','unit*')) allows John to read all databases starting with the letters 'index', and to write to all databases starting with 'unit'.
Errors unknown: The specified username is unknown.
name: The specified username is invalid.
pattern: The specified database pattern is invalid.
permission: The specified permission is invalid.
admin: The "admin" user cannot be modified.
local: A local permission can only be 'none', 'read' or 'write'.
logged-in: The specified user is currently logged in.
update: The operation can only be performed once per user or database pattern.

user:drop[edit]

Signature
user:drop(
  $name      as xs:string,
  $patterns  as xs:string*  := ()
) as empty-sequence()
Summary Drops a user with the specified $name. If non-empty glob $patterns are specified, only the database patterns will be removed.
Examples
  • user:drop('John') drops the user 'John'.
  • user:grant('John', 'unit*') removes the 'unit*' database pattern. If John accesses any of these database, his global permission will be checked again.
Errors unknown: The specified username is unknown.
name: The specified username is invalid.
pattern: The specified database pattern is invalid.
admin: The "admin" user cannot be modified.
logged-in: The specified user is currently logged in.
update: The operation can only be performed once per user or database pattern.
conflict: A user cannot be both altered and dropped.

user:alter[edit]

Signature
user:alter(
  $name     as xs:string,
  $newname  as xs:string
) as empty-sequence()
Summary Renames a user with the specified $name to $newname.
Examples
  • user:alter('John', 'Jack') renames the user 'John' to 'Jack'.
Errors unknown: The specified username is unknown.
name: The specified username is invalid.
admin: The "admin" user cannot be modified.
logged-in: The specified user is currently logged in.
update: The operation can only be performed once per user or database pattern.
conflict: A user cannot be both altered and dropped.

user:password[edit]

Signature
user:password(
  $name      as xs:string,
  $password  as xs:string
) as empty-sequence()
Summary Changes the password of a user with the specified $name.
Examples
  • user:password('John', ) assigns user 'John' an empty password string.
Errors unknown: The specified username is unknown.
name: The specified username is invalid.
update: The operation can only be performed once per user or database pattern.

user:update-info[edit]

Signature
user:update-info(
  $info  as element(info),
  $name  as xs:string      := ()
) as empty-sequence()
Summary Assigns the specified $info element to the user management or, if $name is supplied, to a specific user. This function can be used to manage application-specific data (groups, enhanced user info, etc.).
Examples
  • Store initial groups information:
user:update-info(element info {
  for $group in ('editor', 'author', 'writer')
  return element group { $group }
})
  • Add a group to a specific user:
user:update-info(<info group='editor'/>, 'john')

Errors[edit]

Code Description
admin The "admin" user cannot be modified.
conflict A user cannot be both altered and dropped.
equal Name of old and new user is equal.
local A local permission can only be 'none', 'read' or 'write'.
logged-in The specified user is currently logged in.
name The specified username is invalid.
password The specified password is wrong.
pattern The specified database name is invalid.
permission The specified permission is invalid.
unknown The specified user does not exist.
update The operation can only be performed once per user or database pattern.

Changelog[edit]

Version 8.6
Version 8.6
Version 8.4
Version 8.1

The Module was introduced with Version 8.0.