等待管理员在投入之前验证某些内容的最佳方法是什么?

时间:2017-01-30 20:22:15

标签: php mysql

我正在构建一个Web应用程序,其中有几个组拥有自己的页面,但如果他们想要修改它,管理员必须先验证它。 例如,可以更改以更改其徽标,发布新照片,更改其电话号码,姓名,位置等...基本上,他们可以编辑数据库中的值,但仅限于管理员接受它。管理员必须验证每个修改,因为...我们的客户要求我们。

这就是为什么我们必须创建一个可以称为“待处理查询”管理的系统。

一开始我认为将查询保留在数据库中并在管理员验证它时执行是一个好主意,但如果我们选择此选项,我们就不能使用PDO来构建预准备语句,因为我们必须将字符串连接到建立我们自己的声明,明显的安全问题。

然后我们认为我们应该保留在我们的数据库中调用正确方法(使用PDO)的PHP代码,并且当管理员验证它时我们将使用eval()执行。但同样,使用eval()似乎是一个非常糟糕的主意。正如Rasmus Lerford所说的那样:“如果eval()是答案,你几乎肯定会问 错误的问题“

我考虑过使用eval,因为我想调用使用PDO来处理数据库的方法。

那么,解决这个问题的最佳方法是什么?似乎没有安全的方法来实现它。

2 个答案:

答案 0 :(得分:5)

坦白说,你的想法都很奇怪。

在表格中添加字段,以告知未批准的内容。

答案 1 :(得分:0)

这是一种可能的方法,试图在系统开始扩展时保持一定程度的组织:

  • 创建一个名为PendingRequests的表。这将包含大部分以下字段,可能还有更多字段:

    (id, request_type, request_contents, reqeust_made_by, request_made_timestamp, 
         request_approved_by, request_approved_timestamp, ....)
    


  • Request_contents是一个广义的术语,它可能不仅限于一列。如何收集此列的数据取决于您提供给用户的前端环境(WYSIWYG等)。

  • 当数据首次插入表中时,
  • Request_approved_by将为NULL(即用户已发出初始请求)。这样,您就可以知道管理面板中显示哪些请求。管理员批准后,此列将更新以反映批准该列的管理员id,并且批准的更改最终可能上线

  • 到目前为止,我们只讨论过管理请求。一旦建立了该流程,那么下一个问题就是确定如何最终将批准的请求映射到users。因此,实际上需要对当前提出的系统及其工作流程进行一些研究。简而言之,可能有两种思想流派:

    • 方法1:
      为可自定义的所有内容(徽标,电话号码,名称等)创建一个新表。
                      或
    • 方法2:
      只需将它们作为列添加到您的一个表中(基本上与user表的关系为1:1,就徽标,名称等属性而言)。

  • 这会将我们带到Request_type。这个字段将保存系统的值/标志,以确定更改将发生在哪个字段或表(取决于方法1 方法2 ) - 之后管理员已批准更改。

  • 无论采用何种要求或方法进行数据库管理,PHP和PDO都足够灵活,可以帮助编写可自定义和安全的查询。

  • 顺便说一句,为所有更改/更新的历史记录维护一个表可能是个好主意。到目前为止,显然历史表的数量将再次依赖于方法1 方法2

希望有所帮助。