为了账号安全,请及时绑定邮箱和手机立即绑定

如何在我的WebMVC应用程序中实现访问控制列表?

如何在我的WebMVC应用程序中实现访问控制列表?

PHP
阿晨1998 2019-06-18 10:34:55
第一个问题拜托,你能解释一下如何用MVC实现最简单的ACL吗?这里是在控制器中使用ACL的第一种方法。<?phpclass MyController extends Controller {   public function myMethod() {             //It is just abstract code     $acl = new Acl();     $acl->setController('MyController');     $acl->setMethod('myMethod');     $acl->getRole();     if (!$acl->allowed()) die("You're not allowed to do it!");     ...       }}?>这是一种非常糟糕的方法,它的减号是我们必须在每个控制器的方法中添加ACL段代码,但是我们不需要任何额外的依赖项!下一步是让所有控制器的方法private并将ACL代码添加到控制器的__call方法。<?phpclass MyController extends Controller {   private function myMethod() {     ...   }   public function __call($name, $params) {     //It is just abstract code     $acl = new Acl();     $acl->setController(__CLASS__);     $acl->setMethod($name);     $acl->getRole();     if (!$acl->allowed()) die("You're not allowed to do it!");     ...      }}?>它比以前的代码要好,但是主要的缺点是.所有控制器的方法都应该是私有的我们必须在每个控制器的_Call方法中添加ACL代码。下一种方法是将ACL代码放入父Controller中,但我们仍然需要将所有子控制器的方法保持为私有。解决办法是什么?最佳做法是什么?我应该在哪里调用ACL函数来决定是否执行允许或不允许的方法。第二个问题第二个问题是如何使用ACL获取角色。让我们想象一下,我们有客人、用户和用户的朋友。用户对查看他的个人资料有限制,只有朋友才能查看它。所有客人都无法查看此用户的配置文件。所以,这就是逻辑.。我们必须确保被调用的方法是配置文件。我们必须检测到这个配置文件的所有者我们必须检测查看者是否拥有此配置文件。我们必须阅读有关此配置文件的限制规则。我们必须决定执行还是不执行配置文件方法。主要问题是如何检测配置文件的所有者。我们可以检测到谁是配置文件的所有者,只执行模型的方法$model->getOwner(),但是ACL没有访问模型的权限。我们如何实现这一点?我希望我的想法是清楚的。对不起我的英语。谢谢。如何在我的WebMVC应用程序中实现访问控制列表?
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

一种可能是将所有控制器封装在扩展Controller的另一个类中,并让它在检查授权后将所有函数调用委托给包装好的实例。

您还可以在Dispatcher中(如果您的应用程序确实有一个)并根据URL来查找权限,而不是控制方法。

编辑:您是否需要访问数据库、LDAP服务器等都是正交的问题。我的观点是,您可以基于URL而不是控制器方法来实现授权。这些功能更健壮,因为您通常不会更改URL(URL区域类似于公共接口),但您最好还是更改控制器的实现。

通常,您有一个或多个配置文件,其中将特定的URL模式映射到特定的身份验证方法和授权指令。调度员在向控制器发送请求之前,确定用户是否被授权,如果用户没有授权,则中止调度。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 372 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信