我对所有页面使用相同的标题,其中包括:
- 用户验证码,
- 徽标和主菜单 html,
- 登录信息(未登录时的用户名、注销按钮/登录注册按钮)。
现在的问题。
如何检查页面是否公开(非注册用户可访问)?我通常将非注册用户重定向到登录页面,但是当某些页面是公开的而有些不是时如何处理呢?我显然不能使用标题,因为它是独立于页面的。将公共状况放在每一页上是个好主意吗?
我对所有页面使用相同的标题,其中包括:
现在的问题。
如何检查页面是否公开(非注册用户可访问)?我通常将非注册用户重定向到登录页面,但是当某些页面是公开的而有些不是时如何处理呢?我显然不能使用标题,因为它是独立于页面的。将公共状况放在每一页上是个好主意吗?
您将需要在文件或数据库中存储每个页面是公共页面还是私有页面。否则你怎么知道它是公共页面还是私人页面?我本人建议在数据库中完成此操作,以免您对此类设置进行硬编码。如果您希望将来更改页面,您只需登录后端并进行更改。
您想要实现ACL,它代表访问控制列表。
关于计算机文件系统的访问控制列表 (ACL) 是附加到对象的权限列表。ACL 指定哪些用户或系统进程被授予访问对象的权限,以及允许对给定对象执行哪些操作。典型 ACL 中的每个条目都指定了一个主题和一个操作。例如,如果一个文件的 ACL 包含 (Alice, delete),这将授予 Alice 删除该文件的权限。
您没有提到如何在应用程序中处理路由,但您可以查看下面的文章以获得对该概念的简要说明。
或阅读基于角色的访问控制:
我解决这个问题的方法是延迟加载我的身份验证层;它是一个实用程序类,它使用会话(默认情况下它使用session_xyz()
函数和$_SESSION
)来确定用户是否登录。
需要了解当前登录用户的页面将在顶部有这段代码:
$user = SiteConfig::getSharedAuth()->ensureLoggedIn();
那行代码将始终延迟加载返回当前登录用户的身份验证对象。为此,目标代码执行以下步骤:
$_SESSION['_user']
/login
总而言之,除非另有说明,否则页面默认是公开的:)