eXist-DB建议的用于存储用户信息(超出用户/密码)的做法?

时间:2019-06-12 18:27:17

标签: exist-db

(eXist 4.4)我正在创建用户设置页面,以允许管理员创建站点用户。我想存储的信息超出用户名/密码/权限(例如电子邮件,语言首选项等)。问题是,除了存储在/ db / system / security / exist / accounts集合中的内容之外,还将用户信息存储在何处:是否有建议的安全做法?是否有理由不将新元素简单地添加到/ db / system / security / exist / accounts中保存的用户配置文件.xml文件中?

1 个答案:

答案 0 :(得分:3)

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。另请参见https://github.com/eXist-db/exist/blob/develop/exist-core/src/main/java/org/exist/security/AXSchemaType.java了解源代码。