thinker-g / yii2-ishtar-gate
伊什塔尔之门,yii框架2.0增强维护模式的扩展。
Requires
This package is not auto-updated.
Last update: 2024-09-25 13:54:04 UTC
README
描述
这是什么?
伊什塔尔之门是一个可直接使用的模块,它为yii 2.0网站提供了增强的维护模式。它提供两种不同的阻止模式,并具有一些增强功能:Alpha测试认证、新闻滚动条等。
它可以将整个网站或其中的一部分置于维护模式。当启用时,只有获许用户(通常是我们的测试人员)可以无限制地访问网站。所有其他公开用户将看到预定义的维护页面。
这个想法是给我们团队一个机会在实时网站上测试他们的新更改,而不会“惊讶”到公开用户。同时,也允许他们验证不受公众操作影响的成果。
它是如何工作的?
阻止控制基于yii请求路由。以下提到的两种阻止模式可以应用:
-
积极阻止:除指定路由之外的所有访问都将被阻止,这基本上是一个全站阻止。
-
消极阻止:这与积极阻止相反,只有指定路由将被阻止。这在部署新模块而不关闭整个站点时很有用。
为什么是这个?
除了提供可设置的静态页面来阻止公开访问之外,伊什塔尔之门还提供了基于会话的认证的另一层,允许一组特殊用户(我想称之为“Alpha测试人员”)在正常用户被阻止的情况下访问网站。因此,我们的团队能够在真实的生产环境中运行一些测试。
对于计划维护,模块中集成了新闻滚动条,这样我们就可以在计划维护开始之前向用户提供一些信息。
PS:设置这些增强功能的说明将在后面的章节中提到。
它会损害系统吗?
在设计此模块时已经充分考虑了系统性能。即使模块不经常使用并且需要挂载到“引导”阶段,当它设置为禁用时,它什么也不做。对于yii框架来说,加载一个空的模块几乎不占用任何资源。
快速入门
1. 安装
安装此扩展的首选方式是通过composer。要使用composer安装,请在您的yii2.0应用程序的根目录中执行以下命令。
php composer.phar require "thinker-g/yii2-ishtar-gate:dev-master"
也可以直接从Github项目页面下载副本。如果您以这种方式安装,您需要为“thinker_g\IshtarGate”命名空间设置一个路径别名。例如,我们将模块文件夹(yii2-ishtar-gate)放置在应用程序根路径的“runtime/tmp-extensions”中。将以下别名定义添加到yii应用程序对象的“aliases”属性中。
return [ ... 'aliases' => [ '@thinker_g\IshtarGate' => '@runtime/tmp-extensions/yii2-ishtar-gate' ] ... ]
2. 挂载
以与其他模块相同的方式将模块挂载到应用程序中。在这种情况下,我们使用“istharDemo”作为模块ID。
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module' ] ], ...
然后,将<module ID>添加到应用程序的“引导”中。
... 'bootstrap' => ['log', 'ishtarDemo'], ...
3. 启用
现在模块已经准备好将您的网站切换到维护模式。但您在网站上暂时还看不到任何变化,因为该模块尚未启用。要启用它,我们需要将模块属性 enabled 设置为 true。
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module', 'enabled' => true ] ], ...
现在您应该看到,无论您通过哪个路由访问,您的网站始终显示伊什塔尔门默认的阻止页面。祝您享受 ;-)
在后面的部分中,我们将介绍基本设置和增强功能。
基本用法
注意:如前所述,阻止控制基于yii请求路由。配置中的路由应该是完整路由名称,不包括前面的斜杠 "/"。例如,设置中的“site/about”路由代表实际的路由“/site/about”,前面的斜杠将被模块自动添加。
1. 阻止路由
当 伊什塔尔门 阻止公开访问时,它将运行在属性 blockerRoute 中配置的特定路由,而不是调用请求的路由。默认的blockerRoute设置为“<模块ID>/gate/index”。以下设置将使用“/site/about”作为阻止页面,而不是内置的阻止页面。
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module', 'enabled' => true, 'blockerRoutes' => ['site/about'], ], ... ], ...
默认情况下,伊什塔尔门 在渲染阻止页面时使用其自己的布局文件。这可以通过设置属性 layout 来自定义。这种设计是为了确保阻止页面在访问日常使用的布局文件时不会崩溃。您可以为您的应用程序构建另一个静态布局文件。
2. 正向阻止
正向阻止是模块的默认模式。当模块启用时,所有路由都将被阻止,除了在 exceptRoutes 中设置的路线。
要让某些路由向公众开放,您需要将该路由添加到属性 exceptRoutes 中。以下示例显示了如何在维护模式启用的情况下允许通过路由“/site/about”的访问。
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module', 'enabled' => true, 'exceptRoutes' => [ 'site/about' ], ], ... ], ...
注意:此模块中的路由以及设置在 blockerRoute、errActionRoute、siteLogoutRoute 中的路由将永远不会被阻止,因为它们需要支持一些低级功能。
3. 被动阻止
当模块启用且任何路由添加到属性 onlyRoutes 中时,只有这些路由将被阻止,其他网站的任何部分都不会受到影响。以下设置将仅阻止路由 '/site/signup'。
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module', 'enabled' => true, 'onlyRoutes' => [ 'site/signup' ], ], ... ], ...
4. 在两种阻止模式之间切换
一旦将任何路由添加到 onlyRoutes,则被动阻止被启用。因此,要使用正向阻止模式,只需将 onlyRoutes 保持为空数组或false。
增强功能
1. Alpha测试访问
测试访问控制允许项目团队成员在维护模式(公开用户被阻止)下无限制地访问网站。为了实现这一点,我们有两种选择:特权IP 和 Alpha登录。
-
设置特权IP
将IP地址或IP地址段添加到属性privilegedIPs中。这是一个由IP地址字符串组成的数组。数组中列出的IP地址请求将永远不会被阻止。支持通配符,遵循Gii模块的相同规则。
-
Alpha登录控制
Ishtar Gate提供了一种基于会话的简单身份验证,以便某些用户可以自由访问网站。这种身份验证独立于主机应用程序的身份验证。这种设计是为了满足测试着陆页或网站登录/注册流程的需求。您可以通过路由"<moduleID>/gate/signin"打开登录页面,其中<moduleID>是您在应用程序中配置的ID。注销路由为"<moduleID>/gate/signout"。
与Alpha登录设置相关的有2个选项
-
credentials是一个数组,其键是用户名,值是他们的密码。如果hashCallable中指定了任何散列方法,则存储在这里的密码应该是散列值。
-
hashCallable:这应该是一个回调函数/方法,用于散列用户输入的密码。"signin"动作将使用此回调来散列接收到的密码,并将其与credentials中设置的散列值进行比较。指定的函数应接受一个参数,即输入的密码,并返回一个字符串,其中包含其散列码。
-
2. 新闻横幅
对于计划维护,您可能希望在维护开始之前通知您的用户。Ishtar Gate提供了一个新闻横幅,用于向公众用户显示此类消息。为此,您需要设置news选项。
-
加载新闻
选项news是一个关联数组,其中键是维护开始的时间戳,值是您想向公众用户显示的消息。
news数组的键可以是函数strtotime()能识别的任何字符串,并且只有"晚于"当前时间的键将显示在页面顶部的新闻条中。在消息中,您可以使用令牌"{ts}"来显示其键值(计划开始时间)。以下是一个新闻选项的示例
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module', 'enabled' => true, ... 'news' => [ '2014-10-20 12:15' => 'Site will be down for maintenance at {ts}.', '2014-12-25 00:30:00' => 'Site will be down soon for maintenance.', 'Jan 01, 2015' => 'Site will be down for maintenance on {ts}.', ], ... ] ], ...
如果当前日期是2014-12-01,则上述设置中的第2条和第3条消息将被加载以显示。并且令牌"{ts}"将被相应的键替换。
-
显示新闻
Ishtar Gate使用inewsticker jQuery插件来展示新闻横幅。可以为自定义新闻横幅设置该插件的任何选项。以下示例显示了插件的默认选项(请参阅'pluginOptions'键)
... 'modules' => [ 'ishtarDemo' => [ 'class' => 'thinker_g\IshtarGate\Module', 'enabled' => true, 'news' => [ ... ], 'newsTicker' => [ 'class' => 'thinker_g\IshtarGate\INewsTickerAsset', 'pluginOptions' => [ 'effect' => 'slide', 'speed' => 3000, 'dir' => 'ltr', 'color' => '#fff', 'font_size' => 13, 'font_family' => 'arial', 'delay_after' => 5000 ] ] ... ], ], ...
注意:只有当属性enabled设置为false时,新闻横幅才会生效。
3. 提示版本
当测试人员执行内部测试时,可以在页面的右下角显示一个版本提示。这可以通知我们的测试人员/开发人员,他们现在正在访问alpha测试模式,而网站实际上正在阻止其他公众访问。此功能默认启用,可以通过将选项tipVersion设置为false来关闭。
注意: 只有当 tipVersion 设置为 true 并且当前请求是测试访问(通过 Alpha 登录 或来自 特权 IP)时,版本提示才会显示。
选项参考
联系我
如果您有任何问题或好主意,欢迎您 提交问题 或发送邮件到 jiyan.guo@gmail.com。