libre-informatique / security-bundle
管理安全规则和访问控制
0.2
2017-03-07 10:23 UTC
Requires
- php: >=5.3.0
- jms/security-extra-bundle: dev-master
- symfony/symfony: 2.8.*
Suggests
- libre-informatique/crm-bundle: Manage contacts, organisms and more...
This package is not auto-updated.
Last update: 2024-09-14 18:36:56 UTC
README
此项目已弃用,不再维护。你应该使用 https://github.com/libre-informatique/SonataSyliusUserBundle
SymfonyLibrinfoSecurityBundle
管理安全规则和访问控制
"libre-informatique" 包
// ... public function registerBundles() { $bundles = array( // before Librinfo bundles new JMS\AopBundle\JMSAopBundle(), new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(), new JMS\DiExtraBundle\JMSDiExtraBundle($this), // After... new Librinfo\SecurityBundle\LibrinfoSecurityBundle(), // ... ); }
配置
通用配置
你应在 app/config/security.yml
中拥有此类配置
# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
logout: true
anonymous: ~
access_control:
- { path: ^/(css|images|js), role: IS_AUTHENTICATED_ANONYMOUSLY } # allow assets for anonymous users
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
jms_security_extra:
secure_all_services: false
enable_iddqd_attribute: false
expressions: true
voters:
disable_authenticated: false
disable_role: false
disable_acl: true
method_access_control: {}
# Allows you to specify access control rules for specific methods, such
# as controller actions
method_access_control:
'FOSUserBundle:SecurityController:logoutAction$': 'isAuthenticated()'
默认配置
默认安全配置已在 LibrinfoSecurityBundle/Resources/config/security.yml
中设置。
# LibrinfoSecurityBundle/Resources/config/security.yml
librinfo.security:
# Checking Controllers and/or Services access
method_access_control:
'FOSUserBundle:SecurityController:loginAction$': 'isAnonymous()'
'SonataAdminBundle:Core:dashboard$': 'hasRole("ROLE_USER")'
'Librinfo\\UIBundle\\Twig\\Extension\\AdminMenu::showAdminMenu$': 'hasRole("ROLE_CRM_MANAGER")'
# Defining custom Roles hierarchy (as a tree)
security.role_hierarchy.roles:
ROLE_SUPER_ADMIN:
- ROLE_CRM_MANAGER:
- ROLE_CRM_CONTACT_MANAGER:
- ROLE_CRM_CONTACT_VIEWER:
- ROLE_USER
- ROLE_CRM_ORGANISM_MANAGER:
- ROLE_CRM_ORGANISM_VIEWER:
- ROLE_USER
- ROLE_CRM_ADMIN:
- ROLE_USER
定义自定义角色层次结构和自定义访问控制规则
你可以通过创建新的配置文件 app/config/application_security.yml
来定义你自己的角色层次结构和访问控制规则。
非常重要,请将所有角色都以前缀「ROLE_」开头。这是因为 Symfony 的 RoleVoter 默认使用此前缀。
在此文件中,你可以在 method_access_control:
键下定义你自己的访问控制逻辑。你可以在 security.role_hierarchy.roles:
键下定义你自己的角色层次结构。
librinfo.security:
# ...
security.role_hierarchy.roles:
ROLE_SUPER_ADMIN:
- ROLE_TEST_ADMIN:
- ROLE_TEST_SUB_ADMIN:
- ROLE_USER
- ROLE_TEST_SUB_USER:
- ROLE_TEST_SUB_SUB_USER:
- ROLE_USER
- ROLE_TEST_SUB_OTHER:
- ROLE_TEST_SUB_SUB_OTHER:
- ROLE_TEST_SUB_SUB_SUB_OTHER:
- ROLE_USER
method_access_control:
'Librinfo\\UIBundle\\Twig\\Extension\\AdminMenu::showAdminMenu$': 'hasRole("ROLE_CRM_MANAGER")'
注意事项
- 你的自定义规则将与在
LibrinfoSecurityBundle
包中定义的默认值以及其他包中的值合并。 - 别忘了清除缓存,以便看到你的更改已生效。
- 你的自定义层次结构将与
LibrinfoSecurityBundle
包的默认值以及其他使用此配置系统的包合并。
在包内定义自定义规则和角色
你可以在你的 src 目录中的任何包内定义自定义规则。
实现此目的有几个步骤
- 在
<YOURBUNDLE DIR>/Resources/config/security.yml
中创建你自己的security.yml
- 按照 [定义自定义角色层次结构和自定义访问控制规则](#Defining custom role hierarchy and custom access control rules) 中的描述添加你的规则
- 在
<YOUR BUNDLEDIR>/DependencyInjection/<YOURBUNDLE>Extension.php
中添加以下代码
public function load(array $configs, ContainerBuilder $container)
{
// ...
SecurityConfigurator::getInstance($container)->loadSecurityYml(__DIR__ . '/../Resources/config/security.yml');
// ...
}