首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:如何根据用户/组验证菜单中选项的访问权限?

PHP:如何根据用户/组验证菜单中选项的访问权限?
EN

Stack Overflow用户
提问于 2013-08-01 02:35:53
回答 2查看 521关注 0票数 0

我有一个php页面,其中显示了几个链接作为选项(即一个简单的菜单),但我需要验证登录的用户和/或其分配的组,看看他们是否有权访问每个选项。

让我举个例子来解释一下。

我的"menu.php“页面有一个简单的链接html列表,例如:

代码语言:javascript
复制
option1.php
option2.php
option3.php
...
optionN.php

我省略了html代码,只是显示了逻辑。

现在,每个选项应该只对某些组和/或用户可见。例如,组1访问选项1, 2,5,组2,访问选项2,4,5,组3访问选项1和6,userA访问选项3,4,userB访问选项4,6,依此类推。

我只需要向单个用户或他们的组授予访问权限,换句话说,这是一个or条件,或者是组或者用户,不一定是两者都有。

我通过$_SESSION变量接收用户和组,因此可以直接验证它。

现在,构建脚本以验证每个选项权限的最佳方式是什么?

我目前还不能选择使用数据库来存储权限,所以我需要在代码中完成所有这些操作(硬编码)。

我的想法是为每个选项创建几个数组,并在每个数组中存储有权访问它的每个组和用户的it。

代码语言:javascript
复制
$option1_Users[1,2,4,5];
$option1_Groups[3,5];
$option2_Users[2,5,7];
$option2_Groups[1,6,12];
...

..。依此类推,然后在每个链接上嵌套一个验证,如下所示:

代码语言:javascript
复制
if( in_array($logged_user,$option1_Users) || in_array($logged_group,$option1_Groups){
echo option1.php; //the html for the option 1 link
}

这样,每次回显一个选项时,我都会验证用户/组是否有权访问它。

虽然它可以这样工作,但我认为它非常脏,并且有很多数组(每个选项两次)。有没有更好的方法来完成这一切?有没有一种“通用”或标准的方法来实现它?除了数组和普通i之外,我还能使用什么?

注意:-Each用户可以属于几个组,每个组可以有几个用户(多对多关系),但这是不相关的,因为我可以在脚本中验证任何一个。

-the主"menu.php“已经有了数据库验证来访问它,基于用户的组(如果组没有权限,用户根本不能进入菜单),但目前它只允许访问菜单本身,但在它里面,我需要再次验证用户/组可以看到的具体选项。

-I目前需要硬编码的解决方案(我知道,很脏,但我需要脚本自己验证所有内容,而不是依赖数据库来知道权限),但是如果您有一个涉及数据库并在那里存储权限的解决方案,请随意提及它,以及如何实现它。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-08-01 03:36:52

这不是一个很好的解决方案,但可以帮助您使代码更简洁一些

您可以创建一个主数组,而不是为每个选项创建一堆数组。

代码语言:javascript
复制
$options = array(1 =>array('users' => array(1,2,3,4,5), 'groups'=>array(3,5))))
foreach($options as $option=>$perms) {
    if( in_array($logged_user,perms['users']) || in_array($logged_group,perms['groups']){
        echo '<a href="option.'.$option.'.php">Option '.$option.'</a>';
    }
}

就像我之前说过的,对于这个问题来说不是理想的解决方案,如果你已经有来自数据库的权限来处理菜单的其他部分,你应该使用它,而不是创建两段权限代码。此外,正如您所说的那样,硬编码并不理想,最终可能会比您想象的更快地让您头疼。

票数 1
EN

Stack Overflow用户

发布于 2013-08-02 21:57:12

您可能希望使用授权框架来表达您的场景。看看XACML (http://www.webfarmr.eu/2012/11/call-out-to-a-xacml-policy-decision-point-pdp-from-php/),它支持外部化的、基于策略的授权。

http://docs.cartalyst.com/sentry-2似乎也为PHP提供了一个AuthZ框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17978231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档