Предоставление "обычным" пользователям доступа к действиям 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.:(
Это мой первый пост, поэтому, пожалуйста, прости меня, если я пропустил что-то важное, чтобы включить. Я сделаю все возможное, чтобы заполнить любые детали, и я ценю ваше время, наблюдая за моим положением!