Предоставление "обычным" пользователям доступа к действиям Sonata Admin CRUD

Надеюсь, кто-то может направить меня в правильном направлении!

Я настраиваю систему на основе SonataAdmin для проекта, над которым я работаю и который использует SonataUserBundle.

У меня есть настройка модели, расширяющая AbstractMain для действий CRUD, которая доступна через меню навигации. Отсюда, как супер администратор, я могу перечислять, создавать, редактировать и удалять элементы. Отлично!

Моя цель - использовать тот же портал SonataAdmin для "подписанных" пользователей, но с ограниченным доступом. Они должны иметь возможность только перечислять предметы. Тем не менее, я в некотором затруднении, когда дело доходит до того, как настроить правила безопасности и брандмауэра Symfony / sonata / fosuser, действующие под капотом, чтобы это произошло.

Мой app / config / security.yml как таковой.

security:
    role_hierarchy:
        ROLE_ADMIN:       [ROLE_USER, ROLE_SONATA_ADMIN]
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
        SONATA:
#            - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT  # if you are using acl then this line must be commented

    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    acl:
        provider: mongodb_acl_provider

    # https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username
        hwi:
            id: sonata_oauth2_login.user.provider

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        admin:
#            #pattern: /admin(.*) #REMOVE THIS LINE IF YOU ARE USING SONATA ADMIN
            context:            user
            form_login:
                provider:       fos_userbundle
                login_path:     /portal/login
                use_forward:    false
                check_path:     /portal/login_check
                failure_path:   null
                always_use_default_target_path: false
                default_target_path: /portal/dashboard
            logout:
                path:           /portal/logout
                target:         /portal/login
            anonymous:          true
            oauth:
                resource_owners:
                    google:         "/login/check-google"
                    facebook:       "/login/check-facebook"
                login_path:        /portal/login                 # For Sonata Admin
                use_forward:       false
                default_target_path: /portal/dashboard           # For Sonata Admin
                failure_path:      /portal/login                 # For Sonata Admin
                oauth_user_provider:
                    service:  sonata_oauth2_login.user.provider

    access_control:
        # Admin login page needs to be accessed without credential
        - { path: ^/portal/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/portal/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/portal/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/portal/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }

        # Secured part of the site
        # This config requires being logged for the whole site and having the admin role for the admin part.
        # Change these rules to adapt them to your needs
        - { path: ^/portal/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN, ROLE_SONATA_USER] }
        - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
services:
    mongodb_acl_provider:
        parent: doctrine_mongodb.odm.security.acl.provider

Это мой конфиг sonata_admin в config.yml:

sonata_admin:
    title: BLAHBLAH
    options:
        title_mode: single_text

    templates:
        list: AppBundle:CRUD:list.html.twig
        base_list_field: AppBundle:CRUD:base_list_field.html.twig
        layout: AppBundle::standard_layout.html.twig

    security:
        handler: sonata.admin.security.handler.acl
#        handler: sonata.admin.security.handler.role

        role_admin: ROLE_ADMIN
        role_super_admin: ROLE_SUPER_ADMIN

        # acl security information
        information:
            GUEST:    [VIEW, LIST]
            STAFF:    [EDIT, LIST, CREATE]
            EDITOR:   [OPERATOR, EXPORT]
            ADMIN:    [MASTER]

        # permissions not related to an object instance and also to be available when objects do not exist
        # the DELETE admin permission means the user is allowed to batch delete objects
        admin_permissions: [CREATE, LIST, DELETE, UNDELETE, EXPORT, OPERATOR, MASTER]

        # permission related to the objects
        object_permissions: [VIEW, EDIT, DELETE, UNDELETE, OPERATOR, MASTER, OWNER]

Теперь, с этой конфигурацией, я могу (как суперадмин) редактировать пользователя и предоставлять отдельному пользователю через настройки ACL доступ для редактирования своего собственного профиля, как показано здесь:

Настройки ACL для пользователя

В пользовательских настройках для ролей ничего не существует...

Роли для пользователя

Я сделал все, что мог, чтобы следовать инструкциям SonataUserBundle по настройке безопасности, но мне не хватает понимания где-то по пути.

Короче говоря, все пользователи будут использовать один и тот же административный портал. Администраторы могут создавать новых пользователей, продукты и т. Д. "Обычные" пользователи могут редактировать свой собственный профиль и "просматривать" продукты из класса администратора, расширенного из AbstractAdmin, нажав ссылку в меню слева.

Мне кажется, что я брожу по безопасности Symfony с завязанными глазами прямо сейчас с добавлением fosuserbundle & sonatauserbundle.:(

Это мой первый пост, поэтому, пожалуйста, прости меня, если я пропустил что-то важное, чтобы включить. Я сделаю все возможное, чтобы заполнить любые детали, и я ценю ваше время, наблюдая за моим положением!

0 ответов

Другие вопросы по тегам