如何让登录用户只查看MVC模式中的某些页面


How to let only logged in users view certain pages in MVC pattern?

我做PHP已经很多年了,知道如何检查用户是否登录等等,但我找不到一个用MVC方式做这件事的好例子。

我在想,如果成员页面的控制器像members/memberpage1、member/memberpage2,那么我可以用单词"members"的正则表达式检查控制器的开头,如果它返回true,我可以检查用户是否登录。这可能会起作用,但这是最好的方法吗?

此外,对于控制器文件夹中的成员页面,是否最好将它们放在控制器文件夹中名为"成员"的子文件夹中?无论如何,我肯定会带着观点去做。

最好的选择是检查用户在控制器之外的访问权限。授权不是管理员的责任。你会违反SRP。如果您想了解如何实现它,请阅读本主题:ACL实现。

对于网站的仅限成员的区域,可以在访问控制器之前或通过视图(如果您有主动视图而不是被动视图,则可能有一些受限视图)来处理是否显示它们或显示错误的决定。

尽管通常情况下会同时涉及这两个部分:授权服务更改模型层中的状态,然后视图通过选择在演示中包含错误消息模板来对该更改做出反应。

一切都以不同的方式进行。我尝试为PHP构建一个小型MVC框架,这就是我进行身份验证的方式(非常像rails的方式:)

'SessionsController'

SessionsController包含一个名为'user_is_logged_in'的方法,该方法返回用户会话的当前状态。然后,这个方法被添加到我想要保护的任何类的特殊方法'_before'中。

主应用程序总是在任何其他方法(如果存在)之前运行控制器_before操作。您还可以将'except'传递到它中,以阻止它执行某些操作,因此这只是检查用户是否已登录该操作的一种情况。

当然,正如@tereško极力建议的那样,可能有更符合要求的方法来实现这一点,但它适用于我正在开发的小型应用程序。