【问题标题】:Public pages authentication公共页面认证
【发布时间】:2012-08-28 15:12:53
【问题描述】:

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

  • 用户验证码,
  • 徽标和主菜单 html,
  • 登录信息(未登录时的用户名、注销按钮/登录注册按钮)。

现在回答问题。

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

【问题讨论】:

    标签: php


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      Creating a custom ACL in PHP

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

      Role based access control

      【讨论】:

        【解决方案3】:

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

        需要了解当前登录用户的页面顶部会有这段代码:

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

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

        1. 恢复会话
        2. 如果会话可以恢复,在$_SESSION['_user']中找到用户对象
        3. 如果找到用户对象,则返回它
        4. 如果未找到用户对象,则将当前路径存储在会话中并重定向到/login
        5. 登录完成后,将用户对象存储在会话中并重定向到存储的路径
        6. 返回步骤 1。

        总而言之,除非另有说明,否则页面默认是公开的 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-12
          • 2020-06-05
          • 1970-01-01
          • 1970-01-01
          • 2015-06-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多