PHP OOP - 如何处理授权?

sam*_*sam 5 php oop

我正在为我的想法建立一个管理系统.我精通PHP(至少足以完成我需要做的所有事情),但我对使用OOP没有经验.我尽可能多地使用它,但是我不熟悉的很多最佳实践,所以当我做事时我担心我会以错误的顺序执行它们.

对于这个项目,我有一个用户管理的东西的类,我需要检查用户是否有权管理它.我知道如何检查权限,我的问题是:我应该在哪里做?

我是否应该在课外进行,如下所示:

if user permissions are valid
initialize class
else return error
Run Code Online (Sandbox Code Playgroud)

或者我应该这样做

initialize class
class checks permissions 
class returns error if permissions are invalid
Run Code Online (Sandbox Code Playgroud)

我不确定哪种方法是正确的.一方面,根据我对OOP方法的了解,在类中检查似乎是最好的,但是我也有这样的感觉:当权限未知时,让它达到初始化类可能是坏的.

我应该怎么做?如果有任何类型的文章涵盖这种事情,将非常感谢链接(我无法通过搜索找到任何东西,但我不是100%肯定,如果我正在寻找正确的东西,因为我对OOP知之甚少)

Pal*_*tir 4

这取决于您的权限模型是什么,并且没有“一种正确的方法”可以做到这一点。这是一个方法问题。重要的是,无论您选择什么,都要始终如一地使用它。

在我最近的项目中,我遇到了几种不同的模型。最直接的方法之一是基于页面的权限,如果您执行基于页面的流程并使用对象进行支持,这会很好:您可以在页面顶部定义谁应该访问该权限以及是否可以重定向。这是最简单的一种,但对于特定应用程序非常有用。

相反,如果您使用对象来完成主要流程,则应该保护您的对象方法(而不是类实例化)。如果您有一个“save()”方法,该方法只能由特定用户调用,那么当您进入该方法时,首先要做的就是进行权限检查。

我目前正在使用 MVC 模式,并且有一个控制器,它将操作分派给其子级。它唯一的公共方法是execAction($params)它会调用actionAction($params)自身,但首先它会检查权限。

要记住的一件重要的事情是:永远不要在用户界面上呈现不允许用户执行的操作(除非您试图强迫他购买您的“专业版”,即);-)