gpt4 book ai didi

php - 创建一个存储权限的XML文件,并使用PHP对其进行解析以创建一个列表

转载 作者:行者123 更新时间:2023-12-03 16:15:50 25 4
gpt4 key购买 nike

我正在尝试创建一个xml文件来存储项目列表,在特定角色和区域内的用户应该可以看到这些列表,然后使用PHP对此进行解析以检索此列表。

因此,如果用户从某个$ area登录,则将首先检查该用户,如果该区域不在xml中,则将忽略该用户。

用户一次只能位于一个$区域中,因此如果当前$区域匹配,那么我需要检查其当前$ role是否匹配,一个用户可以有多个角色。

然后应建立一个列表,其中包含用户可以看到的项目,并且只有唯一的项目。

XML结构如下所示:

<?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来获取匹配的区域:

    $matchingAreas = $xml->xpath('/permissions/area[@name="' . $area . '"]');


然后,如果$ matchingAreas> 0,我真的不确定如何继续,我的想法是使用与角色列表匹配的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;
}


由于对 array_unique的调用,输出将与第一个示例相同。

关于php - 创建一个存储权限的XML文件,并使用PHP对其进行解析以创建一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38121292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com