symfony - 如何使用 FOSbundle 在奏鸣曲中正确管理角色并授予用户只读权限?
问题描述
我正在做一个奏鸣曲项目,我使用 Doctrine 管理我的数据库,并使用 FOSbundle 管理我的用户登录。我试图赋予我的用户不同的权利。我有一个名为 Suivi 的实体,这是我当前 Suivi 列表菜单的屏幕截图。正如您在右侧看到的,有不同的按钮(显示、编辑、删除):
我想向某些用户隐藏编辑和删除按钮,就像这样只给他们阅读权限。
因此,受此链接的启发,我在 security.yml 中创建了 ROLE_SONATA_SUIVI_READER:
/app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_SONATA_SUIVI_READER:
- ROLE_SONATA_ADMIN_DEMO_SUIVI_LIST
- ROLE_SONATA_ADMIN_DEMO_SUIVI_VIEW
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
ROLE_DEFAULT: ROLE_SONATA_SUIVI_READER
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
console:
pattern: ^/_console
anonymous: false
security: true
logout: true
http_basic: ~
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
default_target_path: /admin/dashboard
logout:
path: fos_user_security_logout
target: fos_user_security_login
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_DEFAULT }
/src/AppBundle/Admin/SuiviAdmin.yml
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('phylica', null, array('associated_property' => 'numeroPlant'))
->add('phenologie','text',array('label'=>'Phénologie'))
->add('traitement','text',array('label'=>'Traitement'))
->add('competition','text',array('label'=>'Compétition'))
->add('predation','text',array('label'=>'Prédation'))
->add('periode','text',array('label'=>'Période'))
->add('saison')
->add('hauteurMaximumCm','text',array('label'=>'Hauteur Max(cm)'))
->add('dbhB','text',array('label'=>'dbh b'))
->add('dbhH','text',array('label'=>'dbh h'))
->add('mort','text',array('label'=>'Mort'))
->add('nonTrouve','text',array('label'=>'Non trouvé'))
->add('_action', null, array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array(),
)
));
}
这是我在配置中的 fos_user 设置:
/app/config/config.yml
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\User
registration:
form:
type: AppBundle\Form\RegistrationFormType
group:
group_class: AppBundle\Entity\Group
service:
mailer: fos_user.mailer.default
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"
resetting:
email:
from_email:
address: toto@gmail.com
sender_name: Demo Resetting
根据 symfony 的文档(https://symfony.com/doc/3.4/security.html),我认为我可以在 twig 文件中执行以下操作:
{% if is_granted('ROLE_ADMIN') %}
<p>DISPLAY SOMETHING</p>
{% endif %}
但是这个解决方案不能让我满意,这不是 FOSbundle 做事的方式,我不想过度使用 Sonata twig 文件。如果有人有解决方案...在此先感谢。
解决方案
推荐阅读
- google-cloud-platform - 启动 VM 实例“abc”失败。错误:超出配额“CPUS”。限制:0.0 在 asia-south1 地区
- docker - 从容器 id 及其内部 pid 中获取主机 pid
- html - 移动设备上的 IMG
- javascript - 一个接一个地运行多个sweetalerts
- javascript - 使用纯javascript:如果选中一个单选按钮,则仅显示下一部分
- jekyll - 有没有办法在 Liquid 中删除多维数组中的重复项
- php - 如何将布尔值从 Blade 传递到 Vue 组件 Laravel 7?
- javascript - 如何在特定条件下触发通知?
- javascript - 实现放大缩小和拖动能够JQuery
- python-3.x - 添加天数以输入