相关疑难解决方法(0)

如何在Web MVC应用程序中实现访问控制列表?

第一个问题

请问,您能解释一下在MVC中如何实现最简单的ACL.

这是在Controller中使用Acl的第一种方法......

<?php
class 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!");
    ...    
  }

}
?>
Run Code Online (Sandbox Code Playgroud)

这是一个非常糟糕的方法,它的缺点是我们必须将Acl代码添加到每个控制器的方法中,但我们不需要任何其他依赖项!

接下来的方法是制作所有控制器的方法private并将ACL代码添加到控制器的__call方法中.

<?php
class 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!"); …
Run Code Online (Sandbox Code Playgroud)

php oop model-view-controller acl

94
推荐指数
3
解决办法
3万
查看次数

授权是否应该是模型或控制器的一部分?

我正在编写一个具有一些ACL要求的Web应用程序:用户可以更改某些项目,某些项目可以由多个用户编辑,管理员可以编辑任何内容,管理员可以编辑组织内的所有内容等.

我正在使用Play!框架,以及Secure模块的外观,似乎放置授权问题的地方在控制器中.但是,在我看来,授权问题是业务逻辑的一部分,因此应该在模型中.此外,我开始看到控制器中需要重构的重复逻辑.

另一方面,向模型添加授权意味着我必须有一些方法从模型中获取当前用户,这似乎不对.或者,我可以为每个模型方法添加"current_user"参数,但这看起来更糟.

那么常见的做法是什么?可以/应该将授权代码放在模型中,还是将其保存在控制器中?

model-view-controller authorization playframework

25
推荐指数
3
解决办法
3409
查看次数