使用symfony3的订阅模型

时间:2016-03-03 17:04:01

标签: security symfony

我正在尝试使用symfony设置订阅网站。我希望能够通过ROLE_USER向用户免费提供3篇文章,但如果他们想查看更多文章,则可以将他们引导至订阅选项。我在确定如何使用安全系统实现这一点时遇到了麻烦。

我怀疑我需要一个自定义选民。这是我应该看的路线吗?然后也许是自定义access.denied.handler。

我大多不确定如何使用选民来实现这一点。这是要走的路吗?

1 个答案:

答案 0 :(得分:2)

如果他们需要登录(当你谈论角色然后他们可能会需要的话)那么你可以使用请求listener来执行此操作并在每个文章页面加载时减少免费文章的数量(或者如果你想要允许刷新文章页面而不再触及限制,那么你需要为用户阅读文章实现一些存储,并在用户打开3篇不同的文章后禁用免费阅读)。

您需要实现请求事件监听器(在此处阅读有关事件的更多信息:http://symfony.com/doc/current/components/http_kernel/introduction.html#the-kernel-request-event):

<?php


namespace App\AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class FreeReadingListener
{
    /**
     * @param GetResponseEvent $event
     */
    public function onKernelRequest(GetResponseEvent $event)
    {
        if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            // don't do anything if it's not the master request
            return;
        }

        // check if loaded route is article route
        // check if user can read articles for free (can be as some kind flag) - if can't then redirect to subscriptions page
        // log user article read
        // if user used limit - switch free reading flag on user
    }
}

services.yml

services:
    app_bundle.listener.free_reading:
        class: App\AppBundle\EventListener\FreeReadingListener
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

听众文档:http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html