我正在开发一个具有多个应用的网络应用系统,每个应用都有一个用于识别它们的主键。每个用户还具有与应用程序绑定的安全级别,例如安全级别为5的App#1。我希望将所有应用程序/安全信息作为令牌存储在数据库中,然后检索该信息以将其存储在会话。
所以给出以下应用程序:
和分别具有安全级别3,5和7的用户,令牌将存储为:
1.3|2.5|3.7.
我的问题是,如何以可用的形式检索数据?我想在数组中使用App ID的数组键,如somearray[1] = 3
,somearray[2] = 5
等,但我不知道如何处理它。
我在这方面的发展很早,所以我对建议持开放态度。在此先感谢您的帮助。
答案 0 :(得分:3)
令牌将存储为:
1.3 | 2.5 | 3.7
为什么不在数据库中存储安全级别?管理起来会容易得多。我可以想象几个表如下:
App
--------
id
name
....
Users
--------
id
name
email
...
App_users_permissions
--------
id
app_id (references App.id)
user_id (references Users.id)
level
然后,你可以做一个简单的查询,如:
SELECT level FROM App_users_permissions WHERE user_id = 1 AND app_id = 2
此查询将返回给定应用ID和用户ID的当前previlege id。
我认为这是管理此问题的最简单方法。
答案 1 :(得分:2)
您应该按照Pierre-Olivier Bourgeois的建议重新设计数据库。
如果您想坚持使用所描述的格式,可以使用preg_match_all()
:
$subject = '1.3|2.5|3.7.';
$pattern = '=(\d+)\.(\d+)=';
$result = preg_match_all($pattern, $subject, $subpattern, PREG_SET_ORDER);
foreach ($subpattern as $match) {
$out[$match[1]] = $match[2];
}
print_r($out);
答案 2 :(得分:0)
你你 希望将这些东西存储为一个字符串(你不应该),你可以使用explode()再将它分开。
无论如何,更好的解决方案是properly normalize your database(step-to-step guide for this)。
答案 3 :(得分:0)
爆炸
Item = explode('|',token);
List(key,val) = explode('.',Item);
Echo List, val