Rumah  >  Soal Jawab  >  teks badan

Symfony2 memerlukan pengawal sebagai fail masukan untuk berkas untuk menyekat kebenaran.

Adakah anda menggunakan ControllerListener.php untuk pemantauan/

1. Saya ingin tahu cara menyekat hak akses beberapa berkas melalui pengawal yang sama Contohnya, jika pengguna tidak log masuk, lompat terus ke halaman utama atau halaman log masuk.
2. Cara menetapkan kebenaran akses untuk satu berkas. Ia berasaskan pengguna

为情所困为情所困2684 hari yang lalu430

membalas semua(2)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:48:22

    Ia terlalu fleksibel dan mempunyai terlalu banyak kaedah Mari tulis satu aspek buat masa ini:

    Terdapat pakej fungsi pengguna pihak ketiga: FOSUserBundle

    Jika anda menulisnya sendiri, sebelum menggunakan borang log masuk, anda perlu memberitahu rangka kerja cara maklumat pengguna disimpan Jika anda menggunakan Doktrin dan pangkalan data, anda perlu menulis Entiti Pengguna dan melaksanakan antara muka SymfonyComponentSecurityCoreUserUserInterface.

    (1) Buat kelas pengguna

    namespace Acme\UserBundle\Entity;
    
    use Symfony\Component\Security\Core\User\UserInterface;
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * @ORM\Entity
     */
    class User implements UserInterface
    {
        /**
         * @ORM\Column(type="string", length=255)
         */
        protected $username;
    
        // ...
    }

    (2) Gunakan kelas pengguna ini

    # app/config/security.yml
    security:
        # ...
        providers:
            main:
                entity: { class: Acme\UserBundle\Entity\User, property: username }
        encoders:
            Acme\UserBundle\Entity\User: sha512 # 密码用哪种hash保存

    (3) Tambah kawalan kebenaran

    Pengesahan keselamatan boleh dikawal pada peringkat URL Jika anda membenarkan berkas anda berkongsi peraturan URL tertentu, anda boleh menggunakan peraturan untuk mengawalnya:

    # app/config/security.yml
    security:
        # ...
        access_control:
            - { path: ^/some_url, roles: ROLE_USER } # role是用户需要具备的角色,登录成功默认会有ROLE_USER

    Anda juga boleh menggunakan JMSSecurityExtraBundle yang disertakan dengan Symfony 2, yang boleh dikonfigurasikan dengan anotasi:

    use JMS\SecurityExtraBundle\Annotation\Secure;
    
    class MyController
    {
        /**
         * @Secure(roles="ROLE_USER")
         */
        public function secureAction()
        {
            // ...
        }
    }

    Symfony 2 mempunyai banyak item konfigurasi komponen keselamatan, anda boleh merujuk kepada: http://symfony.com/doc/current/refere...

    Pengesahan borang (form_login), yang merupakan borang kotak log masuk yang paling biasa, ialah salah satu kaedah pengesahan yang disokong oleh komponen keselamatan Symfony 2 secara lalai Lain-lain termasuk X.509, HTTP Basic, HTTP Digest, dsb., dan juga boleh disahkan melalui pihak ketiga Pakej kod menambah kaedah pengesahan lain. Item konfigurasi pengesahan borang adalah seperti berikut, saya telah mengulas beberapa item yang biasa digunakan:

    form_login:
        check_path: /login_check # 登录校验URL
        login_path: /login # 登录表单页
        use_forward: false
        always_use_default_target_path: false # 登录后是否总是跳向指定目标页
        default_target_path: / # 登录后的目标页
        target_path_parameter: _target_path # 在登录表单里指定目标页使用的input name
        use_referer: false
        failure_path: /foo
        failure_forward: false
        failure_handler: some.service.id # 自定义登录失败的处理
        success_handler: some.service.id # 自定义登录成功的处理
        username_parameter: _username # 登录表单里用户名的input name
        password_parameter: _password # 登录表单里用户名的input name
        csrf_parameter: _csrf_token
        intention: authenticate
        csrf_provider: my.csrf_provider.id
        post_only: true
        remember_me: false # 是否启用“记住我”功能

    Terdapat juga ACL terbina dalam yang memberikan kawalan yang lebih halus. Tetapi itu satu lagi bab besar.

    balas
    0
  • 某草草

    某草草2017-05-16 16:48:22

    Terima kasih banyak atas jawapan anda ACL terbina dalam sememangnya sangat berkuasa

    balas
    0
  • Batalbalas