创建一个XML文件来存储权限并使用PHP解析它以创建一个列表
问题描述:
我试图创建一个xml文件来存储某个角色和区域内的用户应该能够看到的项目列表,然后解析这与PHP来检索这个列表。创建一个XML文件来存储权限并使用PHP解析它以创建一个列表
因此,如果用户从某个$区域登录,那么将首先检查并忽略该区域,如果该区域不在xml内。
用户一次只能在一个$区域中,所以如果当前的$区域匹配,我需要检查它们当前的$角色是否匹配,用户可以有多个角色。
然后应该为用户可以看到的项目构建一个列表,只包含唯一的项目。
的XML结构如下:
$matchingAreas = $xml->xpath('/permissions/area[@name="' . $area . '"]');
这时如果$ matchingAreas> 0我真的不是:
<?xml version="1.0"?>
<permissions>
<area name="accounts">
<role name="user">
<item>item1</item>
<item>item2</item>
</role>
<role name="manager">
<item>item1</item>
</role>
</area>
<area name="records">
<role name="user">
<item>item1</item>
<item>item2</item>
</role>
</area>
</permissions>
我已经使用XPath得到匹配区启动确定如何继续,我的想法是使用匹配一系列角色的xpath项目来构建对象:
foreach($roles as $role){
$roleNodes += $matchingAreas->xpath('/permissions/area/role[@name="' . $role . '"]');
}
我是PHP新手,开始显得杂乱/效率低下,所以我希望有人能告诉我最佳方式来进行这样的事情?
感谢
答
你可以用一个XPath做到这一点很容易:
$area = "records";
$role = "user";
$itemQuery = sprintf(
'/permissions/area[@name="%s"]/role[@name="%s"]/item',
$area,
$role
);
$permissions = simplexml_load_string($string);
foreach ($permissions->xpath($itemQuery) as $item) {
echo $item->asXML(), PHP_EOL;
}
将输出
<item>item1</item>
<item>item2</item>
如果一个用户可以拥有多个角色,你可以做
$area = "accounts";
$role = "manager user";
$itemQuery = sprintf(
'/permissions/area[@name="%s"]/role[contains("%s", @name)]/item',
$area,
$role
);
$permissions = simplexml_load_string($string);
foreach (array_unique($permissions->xpath($itemQuery)) as $item) {
echo $item->asXML(), PHP_EOL;
}
由于t o致电array_unique
,输出将与第一个例子相同。
谢谢,如果用户有多个角色,我是否需要额外的循环? – mao
@mao no,你可以在XPath中使用'contains'测试。查看更新。 – Gordon
太棒了,谢谢我还没有遇到过sprintf – mao