0

我试图限制用户访问 /admin/ 中的任何内容,如果他们尝试这样做,他们将被重定向到 /login。

目前我可以进入使用传统登录表单的登录页面,如果我提交它,我会收到一条错误消息,提示“凭据错误”,因此 /login_check 似乎工作正常。但是,如果我转到 /admin/ 或 /admin/foo,它不会重定向到 /login。相反,它显示“找不到 GET /admin/ 的路由”。

我的 security.yml 文件是:

jms_security_extra:secure_all_services:假表达式:真

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:
    ROLE_SUPER_ADMIN:
providers:
    administrators:
                entity: { class: XXXBundle:AdminUser, property: email }

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    admin_area:
        pattern:    ^/admin
        form_login:
          login_path:  /login
          check_path:  /admin/login_check
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
  - { path: ^/admin, roles: ROLE_ADMIN }

我的 routing.yml 文件是:

login:
    pattern:   /login
    defaults:  { _controller: XXXBundleSecurity:login }
login_check:
    pattern:   /admin/login_check
4

2 回答 2

1

您似乎错过了您尝试访问的两条路线。尝试将其添加到您的 routing.yml:

admin:
    resource: "@XXXBundle/Controller/Admin.php"
    type:     annotation
    prefix:   /admin

我非常喜欢使用注释的路由,所以我在这个例子中使用了它。

然后在您的 Admin.php 中,您可以使用以下内容:

// XXXBundle/Controller/Admin.php

namespace XXXBundle/Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;

class AdminController extends Controller
{
    /**
     * @Route("/", name="admin_index")
     */
    public function indexAction(Request $request)
    {
       // Code goes here
    }

    /**
     * @Route("/foo ", name="admin_foo")
     */
    public function fooAction(Request $request)
    {
       // Code goes here
    }
}
于 2013-01-10T15:01:48.280 回答
1

/admin/XXX 路由是不必要的。如果你已经设置

pattern:    ^/admin

/admin/XXX 应该被重定向到 /login。更多细节见http://symfony.com/doc/2.0/book/security.html#using-a-traditional-login-form

于 2013-01-10T14:57:28.870 回答