【问题标题】:Symfony2 check if user has access to url inside TwigSymfony2 检查用户是否可以访问 Twig 中的 url
【发布时间】:2016-06-10 12:27:34
【问题描述】:

Symfony2 中有没有办法检查用户是否可以访问 Twig 模板中的指定 url?

类似这样的:

{% if user_has_access( '/some/url/to/access' ) %}
   <a href="{{ path( '/some/url/to/access' ) }}">You can come here</a>
{% endif %}

【问题讨论】:

    标签: php symfony security twig


    【解决方案1】:

    如果需要,您可以为此创建自定义 Twig 扩展。

    您可以在文档中找到有关扩展的更多信息。

    http://symfony.com/doc/current/cookbook/templating/twig_extension.html

    狐狸示例: 命名空间 AppBundle\Twig;

    class AppExtension extends \Twig_Extension
    {
        public function getFilters()
        {
            return array(
                new \Twig_SimpleFilter('user_has_access', array($this, 'userHasAccess')),
            );
        }
    
        public function userHasAccess($user, $pathForCheck)
        {
            //your logic for check access. can returns true or false
            return true;
        }
    
        public function getName()
        {
            return 'app_extension';
        }
    }
    

    在树枝模板中

    {% if user_has_access(app.user, 'path/to/check') %}
    {% endif %}
    

    此代码可能有错误,因为它只是原型。

    【讨论】:

    • 你想要一个函数,而不是一个过滤器。
    • 这个过滤器效果很好。下面是我在 Twig 中使用它的方法:{% if item.url|user_has_access %} {% endif %} 注意你不需要传递app.user,因为你可以在 AppExtension 类中使用\Drupal::currentUser() 获取它。
    • 你能分享更多信息吗?我认为缺少了最重要的部分:过滤器、函数中的逻辑,无论你如何称呼它。这看起来怎么样?
    【解决方案2】:

    就像 Paweł Brzoski 解释的那样,可以创建自定义 twig 函数。

    但在 Symfony 中,正确的方法是使用is_granted('ROLE_...')

    【讨论】:

    • 是的,有可能。只是不是开箱即用。 I did this in Airship{% if can('read', 'url/endpoint') %} 或更一般地说,{% if can_read('url/endpoint') %}
    • 有问题是“在 Symfony2 中”。没有什么是开箱即用的,但是你可以编写代码……Airship 不是 Symfony2 项目,所以它不是真正的上下文。
    • 飞艇使用 Twig。 Symfony2 使用 Twig。是的,在 Symfony2 中可以做到这一点。我提供的是一个反例来反驳你“不可能”的错误陈述。
    • 请为您的答案添加一些进一步的解释。 is_granted 检查特定角色,这不会检查用户是否可以访问特定 URL
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多