<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Symfony中文教程 &#187; is_granted</title>
	<atom:link href="http://www.newlifeclan.com/symfony/archives/tag/is_granted/feed" rel="self" type="application/rss+xml" />
	<link>http://www.newlifeclan.com/symfony</link>
	<description>站在巨人肩膀上的phpweb框架</description>
	<lastBuildDate>Fri, 12 Dec 2025 00:58:27 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>KU案例2之06Twig Security和IS_AUTHENTICATED_FULLY</title>
		<link>http://www.newlifeclan.com/symfony/archives/411</link>
		<comments>http://www.newlifeclan.com/symfony/archives/411#comments</comments>
		<pubDate>Thu, 02 Apr 2015 02:56:16 +0000</pubDate>
		<dc:creator><![CDATA[napoleon]]></dc:creator>
				<category><![CDATA[实战教程]]></category>
		<category><![CDATA[IS_AUTHENTICATED_ANONYMOUSLY]]></category>
		<category><![CDATA[IS_AUTHENTICATED_FULLY]]></category>
		<category><![CDATA[IS_AUTHENTICATED_REMEMBERED]]></category>
		<category><![CDATA[is_granted]]></category>

		<guid isPermaLink="false">http://www.newlifeclan.com/symfony/?p=411</guid>
		<description><![CDATA[<p>之前我们用一个链接完成了注销工作。我知道了symfony退出是这么的容易。只要logout健在防火墙下并且我们 [&#8230;]</p>
<p><a rel="nofollow" href="http://www.newlifeclan.com/symfony/archives/411">KU案例2之06Twig Security和IS_AUTHENTICATED_FULLY</a>，首发于<a rel="nofollow" href="http://www.newlifeclan.com/symfony">Symfony中文教程</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>之前我们用一个链接完成了注销工作。我知道了symfony退出是这么的容易。只要logout健在防火墙下并且我们指定一个/logout路由，我们就能够看到他工作了。这些操作symfony都会在幕后处理。</p>
<p><span id="more-411"></span></p>
<h2>在Twig里使用：is_granted</h2>
<p>打开首页模版，并添加注销链接。使用Twig的path函数并且将路由名称传入，他就会生成URL。</p><pre class="crayon-plain-tag">{# src/Yoda/EventBundle/Resources/views/Event/index.html.twig #}
{# ... #}

&lt;a class="button" href="{{ path('event_new') }}"&gt;Create new event&lt;/a&gt;

&lt;a class="link" href="{{ path('logout') }}"&gt;Logout&lt;/a&gt;

{# ... #}</pre><p>如果没有登录我们是不希望让logout显示的。is_granted通过一个特殊的字符串IS_AUTHENTICATED_REMEMBERED来判断是否显示。</p><pre class="crayon-plain-tag">{% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
    &lt;a class="link" href="{{ path('logout') }}"&gt;Logout&lt;/a&gt;
{% endif %}</pre><p>暂且还算完美！</p>
<p>级别：IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY</p>
<p>is_granted是如何在twig里检测安全性，有很多方式，我们可以通过IS_AUTHENTICATED_REMEMBERED，也可以通过普通的角色方式ROLE_USER和ROLE_ADMIN。所以说除了检查用户是否已给定角色，symfony还有这3个特殊的安全检查：</p>
<ul>
<li>首先，IS_AUTHENTICATED_REMEMBERED是表示已登录的所有用户。可以记录普通的登录，还可以记录选择过remember me状态的用户，此用户会有一个“remember me” cookie。</li>
<li>其次，IS_AUTHENTICATED_FULLY会更加强大一些。如果你登录了你就会拥有他，如果你有一个“remember me” cookie，你就没办法使用他了。</li>
<li>最后，IS_AUTHENTICATED_ANONYMOUSLY是给所有用户的，即使你没有登录。既然每个人都是这样，他好像一文不值，但它确实还是有一些作用的,就是如果你需要“白名单的url”（例如login是任何人都可以访问的）它应该是可以公开的，所以这就是他的作用。</li>
</ul>
<p>我们使用IS_AUTHENTICATED_REMEMBERED，来让每一个登录的人或者记住密码的人来显示注销。</p>
<p>为没有登录的人显示登录链接</p><pre class="crayon-plain-tag">{# src/Yoda/EventBundle/Resources/views/Event/index.html.twig #}
{# ... #}

{% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
    &lt;a class="link" href="{{ path('logout') }}"&gt;Logout&lt;/a&gt;
{% else %}
    &lt;a class="link" href="{{ path('login_form') }}"&gt;Login&lt;/a&gt;
{% endif %}</pre><p>你很可能在所有的页面都使用IS_AUTHENTICATED_REMEMBERED，但是在结账页面，IS_AUTHENTICATED_FULLY会给你真正的安全。如果用户是IS_AUTHENTICATED_REMEMBERED并且访问支付的页面，那么他们会被重定向到登录页。</p>
<p><a rel="nofollow" href="http://www.newlifeclan.com/symfony/archives/411">KU案例2之06Twig Security和IS_AUTHENTICATED_FULLY</a>，首发于<a rel="nofollow" href="http://www.newlifeclan.com/symfony">Symfony中文教程</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newlifeclan.com/symfony/archives/411/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
