如何在 Symfony2 中创建和注册新角色

Posted

技术标签:

【中文标题】如何在 Symfony2 中创建和注册新角色【英文标题】:How to create and register new roles in Symfony2 【发布时间】:2012-05-03 20:08:51 【问题描述】:

我从官方Symfony2 doc on Security 看到,除了“经典”角色(即 ROLE_USER、ROLE_ADMIN 等)之外,还可以定义新角色。

如何定义新角色并将它们注册到我的 Symfony2 应用程序,以便在 security.yml 中创建角色层次结构?

很抱歉打扰了大家!我认为答案很简单。事实上,似乎以 ROLE_ 开头的名称开始使用新角色就足够了。 例如,可以说 ROLE_NEWS_AUTHOR 只允许具有该角色的人能够在网站中插入新闻。

谢谢。

【问题讨论】:

【参考方案1】:

当然,您可以简单地添加以 ROLE_SOMEROLE 开头的任何角色。在 security.yml 文件中有两个主要部分 1.限制访问 2.哪些成员可以访问

一个。 access_control:限制模式并指定可以访问的角色。 湾。 role_hierarchy:这里是角色的层次结构,对于以下示例,管理员用户(ROLE_ADMIN)具有角色 ROLE_USER、ROLE_NEWS_AUTHOR。所以他可以访问 USER 和 NEWS_AUTHOR 的所有页面。无论您可以提供什么层次结构。

access_control:
        -  path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY /login any one can access this pattern
        -  path: ^/admin/, roles: ROLE_ADMIN //block all pattern /admin/anything*
        -  path: ^/news/, roles: ROLE_NEWS_AUTHOR  //block all pattern /news/anything*
role_hierarchy:
        ROLE_ADMIN: [ROLE_USER,ROLE_NEWS_AUTHOR]

在您的控制器中,您可以检查角色,

if(TRUE ===$this->get('security.context')->isGranted('ROLE_ADMIN') )

     // do something related to ADMIN

else if(TRUE ===$this->get('security.context')->isGranted('ROLE_NEWS_AUTHOR') )

    // do something related to News Editor

希望这对您有所帮助。 快乐的编码。

【讨论】:

感谢您提供更多信息。 还要注意角色的名字应该总是以“ROLE_”开头,否则 Symfony 将无法识别它们。

以上是关于如何在 Symfony2 中创建和注册新角色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular CLI 中创建和使用新的构建配置?

在 azure web 角色的临时文件夹中创建和读取 html 文件并提供它

如何在 Ember Data 1.13.7 中创建和保存新模型并更新 UI

如何在应用程序包中创建和检查子目录

如何在子进程python中创建和复制文件的内容

如何在 Symfony2 中创建 cron 任务