如何实现自己的选民黑名单IP地址

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何实现自己的选民黑名单IP地址

Symfob娱乐下载ony2安全组件提供了几个层来授权用户。其中一层叫做“投票者”。投票者是一个专用的类,用于检查用户是否拥有连接到应用程序的权限。例如,Symfony2提供了ob娱乐下载一个层,该层检查用户是否被完全授权,或者它是否具有一些预期的角色。

有时候,创建一个自定义投票人来处理框架没有处理的特定情况是有用的。在本节中,您将学习如何创建一个投票人,允许您根据用户的IP将其列入黑名单。

选民界面

自定义投票人必须实现VoterInterface,需要以下三种方法:

1 2 3 4 5 6
接口VoterInterface函数supportsAttribute属性函数supportsClass函数投票(TokenInterface令牌对象数组,属性;}

supportsAttribute ()方法用于检查投票人是否支持给定的用户属性(即:角色,acl等)。

supportsClass ()方法用于检查投票人是否支持当前用户令牌类。

投票()方法必须实现验证是否授予用户访问权限的业务逻辑。该方法必须返回以下值之一:

  • VoterInterface: ACCESS_GRANTED:允许用户访问应用
  • VoterInterface: ACCESS_ABSTAIN:投票人不能决定是否授予用户权限
  • VoterInterface: ACCESS_DENIED:不允许该用户访问该应用

在本例中,您将检查用户的IP地址是否与黑名单地址列表匹配。如果用户的IP被列入黑名单,您将返回VoterInterface: ACCESS_DENIED,否则你会回来的VoterInterface: ACCESS_ABSTAIN因为这个投票人的目的只是拒绝访问,而不是授予访问。

创建自定义选民

如果要根据IP地址将用户列入黑名单,可以使用请求service,并将IP地址与黑名单中的IP地址进行比较:

12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/ / src / Acme / DemoBundle /安全/授权/选民/ ClientIpVoter.php名称空间AcmeDemoBundle安全授权选民使用ob娱乐下载组件DependencyInjectionContainerInterface使用ob娱乐下载组件安全核心授权选民VoterInterface使用ob娱乐下载组件安全核心身份验证令牌TokenInterfaceClientIpVoter实现了VoterInterface公共函数__construct(ContainerInterface容器数组,blacklistedIp=数组()->容器=容器->blacklistedIp =blacklistedIp;}公共函数supportsAttribute属性//你不会检查用户属性,所以返回true返回真正的;}公共函数supportsClass//你的投票人支持所有类型的令牌类,所以返回true返回真正的;}函数投票(TokenInterface令牌对象数组,属性请求->容器->get (“请求”);如果(in_array (请求->getClientIp (),->blacklistedIp)) {返回VoterInterface::ACCESS_DENIED;}返回VoterInterface::ACCESS_ABSTAIN;}}

就是这样!投票人完成了。下一步是将投票人注入安全层。这可以通过服务容器轻松完成。

提示

方法的实现
supportsAttribute ()
而且supportsClass ()
框架不会在内部调用。一旦你注册了你的
选民的投票()方法将始终被调用,不管这两个方法是否返回true。类的实现中调用这些方法投票()方法和返回ACCESS_ABSTAIN如果您的投票人不支持类或属性。

宣布选民为一项服务

要将投票者注入到安全层,你必须将其声明为服务,并将其标记为"security.voter":

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
# src / Acme / AcmeBundle /资源/ config / services.yml服务:security.access.blacklist_voter:类:Acme \ \选民\ ClientIpVoter DemoBundle \安全\授权参数:[" @service_container ",[123.123.123.123,171.171.171.171]]公众:标签:-名称:security.voter

提示

请确保从您的主应用程序配置文件(例如:应用程序/配置/ config.yml).有关更多信息,请参阅服务容器.要阅读有关一般定义服务的更多信息,请参见服务容器一章。

更改访问决策策略

为了使新的投票人生效,您需要更改默认的访问决策策略,默认情况下,该策略授予if访问权任何选民授予访问权限。

在本例中,选择一致策略。不像肯定的策略(默认值),使用一致策略,如果只有一个选民拒绝访问(例如ClientIpVoter),访问权限不会授予最终用户。

为此,重写默认值access_decision_manager部分,使用以下代码。

  • YAML
  • XML
  • PHP
1 2 3 4 5
# app / config / security.yml安全:access_decision_manager:#策略可以是:肯定的,一致的或一致的策略:一致

就是这样!现在,当决定用户是否应该访问时,新的投票将拒绝访问黑名单ip列表中的任何用户。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。