eXist-DB 推荐的存储用户信息的做法(超过 user/pword)?

eXist-DB recommended practice for storing user info (beyond user/pword)?

(eXist 4.4) 我正在创建一个用户设置页面以允许管理员创建站点用户。我想存储用户 name/pword/permissions 以外的信息(例如电子邮件、语言偏好等)。问题是将用户信息存储在集合中以外的位置 /db/system/security/exist/accounts:是否有推荐的安全做法?是否有理由不简单地将新元素添加到用户配置文件中。xml 文件保存在 /db/system/security/exist/accounts 中?

eXist 支持 axschema.org 架构中的多个帐户元数据属性。例如,给定一个 $user 形式的记录:

<user>
    <friendly-name/>
    <first-name/>
    <last-name/>
    <full-name/>
    <email/>
    <country/>
    <language/>
    <timezone/>
</user>

您可以通过以下方式设置这些属性:

sm:set-account-metadata($username, xs:anyURI("http://axschema.org/namePerson"), $user/full-name),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/namePerson/first"), $user/first-name),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/namePerson/last"), $user/last-name),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/namePerson/friendly"), $user/preferred-name),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/contact/email"), $user/email),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/contact/country/home"), $user/country),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/pref/language"), $user/language),
sm:set-account-metadata($username, xs:anyURI("http://axschema.org/pref/timezone"), $user/timezone)

然后您可以使用 sm:get-account-metadata() 函数检索这些属性。

查看源代码http://exist-db.org/exist/apps/fundocs/index.html?q=account-metadata for the relevant function documentation. See also https://github.com/eXist-db/exist/blob/develop/exist-core/src/main/java/org/exist/security/AXSchemaType.java