[英]How to store and use inherited roles in Symfony?
我正在尝试在Symfony3应用程序中实现角色。
我在继承角色方面遇到困难。 我将每个用户的角色保存到user表中的role列。 我没有将继承的角色保存到数据库中。
我的User实体中的getRoles()函数从role列返回角色,这不会检索继承的角色。
如何确保getRoles()也以优雅的方式返回继承的角色? 我尝试了以下操作:
public function getRoles()
{
$roles = $this->roles;
// ensure the inherited roles from role heirarchy are added accordingly
switch ($roles[0]){
case 'ROLE_SUPER_ADMIN':
$roles[] = 'ROLE_AGENCY_ADMIN';
$roles[] = 'ROLE_CLIENT_ADMIN';
$roles[] = 'ROLE_ADMIN';
break;
case 'ROLE_AGENCY_ADMIN':
case 'ROLE_CLIENT_ADMIN':
$roles[] = 'ROLE_ADMIN';
break;
}
$roles[] = 'ROLE_USER';
return array_unique($roles);
}
这按预期工作,但我感觉有更好的选择。 安全分析器告诉我以下内容:
因此,我在角色部分中也继承了角色,这对我来说似乎不对。 如果安全分析器知道继承的角色,那么我也应该能够访问该信息,而不是自己将其混在一起?
我一直在搜寻SO,以找到合适的解决方案,但到目前为止却感到困惑。
衷心感谢您的指导。
您可以创建新的role.yml文件,在其中定义新的role_hierarchy:
security:
role_hierarchy:
ROLE_SUPER_ADMIN:
- ROLE_ALLOWED_TO_SWITCH
- ROLE_VIEW_HOME_OVERVIEW
- ROLE_ADMIN
ROLE_ADMIN:
- ROLE_VIEW_HOME_OVERVIEW
- ROLE_VIEW_CALENDAR_OVERVIEW
- ROLE_VIEW_ADMIN_OVERVIEW_L .......
不要忘记将其添加到您的config.yml文件中
imports:
- { resource: roles.yml }
现在您可以直接在控制器中检查:
if (!$this->get('security.authorization_checker')->isGranted('ROLE_VIEW_HOME_OVERVIEW')) {
throw new AccessDeniedException();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.