限制用户在 Web 应用程序 (PHP) 上的操作的通用方法


Generic way to restrict a user's actions on a web application (PHP)

我的任务是制定一个模型,该模型将在现有Web应用程序中引入限制或级别。因此,构建应用程序时不会轻松实现此功能。服务器端是PHP,客户端是jQuery。

这些限制与用户购买的计划或订阅相关联。

我想出了一个模型,其中:

  • 函数与操作映射。
  • 操作是用户可以在应用程序上执行的操作的有意义的定义。
  • 计划是具有有意义的限制值的操作列表。

一个真实世界的例子

  • requestIntroduction(( 与 'requesting' <-> 'introduction' 映射
  • 该操作是"介绍"的"请求">
  • 当前计划允许用户请求 5 个介绍
  • 进行检查

我正在寻找一种通用方法来尽可能多地控制代码中的一个位置的限制,因为:

  • 计划将经常添加、删除和调整
  • 限制将经常添加、删除和调整(到计划中(
  • 调整限制和计划将成为将来管理控制台中的一项功能。

我的问题是:有没有更好的方法来实现相同的通用方法来处理限制并最大限度地减少对计划和/或限制的未来编码更改?

假设你在控制器上定义了你的 Actions 方法,如 "emptyBinAction"、"gothereAction"(承认你使用的是 MVC 或类似的设计模式(

您可以根据方法名称轻松检查权限:

例:

protected function emptyBinAction($params) {
    $this->checkAccess();
    ...
}

例如,您可以使用checkAccess()选中登录 + 如果用户有权执行此操作:

protected function checkAccess() {  
     // Check login 
     if ($this->myModel->checkLogin()) {
         // Query DB for permission (pass user id and func name)
         if (!$this->myModel->checkPerm($usrId,$this->getCallerName()) ) {
             return false;
         }
     }
 ...
} 
返回

调用方名称的示例方法(在本例中将返回"emptyBinAction"(:

public function getCallerName() {
    $e = new Exception();
    $trace = $e->getTrace();
    return $trace[2]['function'];
}

就 checkPerm(( 查询和数据库结构而言,您可以随心所欲地执行,将权限归因于用户组或每个用户,或两者兼而有之。