我有以下两个文件:
<?xml version="1.0" encoding="utf-8" ?>
<!-- D E F A U L T H O S P I T A L P O L I C Y -->
<xas DefaultPolicy="open" DefaultSubjectsFile="subjects.xss">
<rule id="R1" access="deny" object="record" subject="roles/*[name()!='Staff']"/>
<rule id="R2" access="deny" object="diagnosis" subject="roles//Nurse"/>
<rule id="R3" access="grant" object="record[@id=$user]" subject="roles/member[@id=$user]"/>
</xas>
和另一个名为subjects.xss的xml文件是:
<?xml version="1.0" encoding="utf-8" ?>
<subjects>
<users>
<member id="dupont" password="4A-4E-E9-17-5D-CE-2C-DD-43-43-1D-F1-3F-5D-94-71">
<name>Pierre Dupont</name>
</member>
<member id="durand" password="3A-B6-1B-E8-C0-1F-CD-34-DF-C4-5E-BA-02-3C-04-61">
<name>Jacqueline Durand</name>
</member>
</users>
<roles>
<Staff>
<Doctor>
<member idref="dupont"/>
</Doctor>
<Nurse>
<member idref="durand"/>
</Nurse>
</Staff>
</roles>
</subjects>
我正在编写一个xsl表,它将读取policy.xas中每个规则的主题值,以及当前登录的用户(在样式表中作为变量“user”访问)是否包含在该主题值中(比如roles / /护士),然后做点什么。
我无法测试当前登录的用户($ user等于说“durand”)是否包含在角色中// Nurse在subject文件中(这是一个不同的xml文件)。希望澄清我的问题。有任何想法吗?提前谢谢。
答案 0 :(得分:1)
我怀疑你的$ user变量拥有一个成员节点,对吗?在这种情况下,测试将是: -
/roles/Nurse[member/idref=$user/@id]
顺便说一句,使用标签名称来携带诸如“护士”和“医生”之类的数据并不是一个好习惯。您实际上是在说每个新角色都是新类型。更好的是: -
<roles>
<role>
<name>Nurse</name>
<member idref="durand" />
</role>
...
</roles>
您的测试将是: -
/roles/role[name='Nurse' and member/idref=$user/@id]