公共页面验证

时间:2012-08-28 15:12:54

标签: php

我对所有页面使用相同的标题,包括:

  • 用户身份验证码,
  • logo&主菜单html,
  • 登录信息(未登录时的用户名,注销按钮/登录注册按钮)。

现在回答这个问题。

如何检查页面是否公开(非注册用户可访问)? 我通常会将非注册用户重定向到登录页面,但是当某些页面是公开的而有些页面不公开时如何处理? 我显然不能使用标题,因为它与页面无关。将公共条件放在每一页都是个好主意吗?

3 个答案:

答案 0 :(得分:0)

您需要在文件或数据库中存储每个页面是公共页面还是私有页面。否则你怎么知道它是公共页面还是私人页面?我自己会建议在数据库中完成此操作,这样您就不会对此类设置进行硬编码。如果您希望将来更改页面,您只需登录后端并进行更改。

答案 1 :(得分:0)

您想要实现ACL,它代表访问控制列表。

  

关于计算机文件系统的访问控制列表(ACL),   是附加到对象的权限列表。 ACL指定哪个   用户或系统进程被授予访问对象的权限,以及   给定对象允许的操作。每个条目都是典型的   ACL指定主题和操作。例如,如果文件有   包含(Alice,delete)的ACL,这将赋予Alice权限   删除文件。

您没有提及如何处理应用程序中的路由,但您可以查看下面的文章,以获得该概念的简要说明。

Creating a custom ACL in PHP

或阅读有关基于角色的访问控制:

Role based access control

答案 2 :(得分:0)

我解决这个问题的方法是懒惰加载我的身份验证层;它是一个实用程序类,它使用会话(默认使用session_xyz()函数和$_SESSION)来确定用户是否已登录。

需要了解当前登录用户的页面将在顶部显示以下代码:

$user = SiteConfig::getSharedAuth()->ensureLoggedIn();

该行代码将延迟加载认证对象,该对象始终返回当前登录的用户。为此,目标代码执行以下步骤:

  1. 恢复会话
  2. 如果可以恢复会话,请在$_SESSION['_user']
  3. 中找到用户对象
  4. 如果找到用户对象,则将其返回
  5. 如果找不到用户对象,请在会话中存储当前路径并重定向到/login
  6. 登录完成后,将用户对象存储在会话中并重定向到存储的路径
  7. 返回第1步。
  8. 总而言之,除非另有说明,否则页面默认是公开的:)