Symfony 安全访问控制不会对数据库中的用户更改做出反应
Symfony Security access control doesn't react to user changes in DB
我的用户提供商设置为用户实体。
该实体有 getRoles() 模型并且它工作正常。
我的问题是:
- 网站中有两个用户角色(Admin 和 Regular)
- 普通用户无法访问对象创建(access_control 设置为只有管理员才能执行此操作)
- 用户登录时仍具有“常规”角色
- 我去编辑数据库中的“常规”用户并将其设置为'Admin'
- 用户仍处于登录状态,access_control 仍将其视为“常规”
- $this->getUser()->getRoles() 具有“Admin”角色。
- 用户仍然无法访问对象创建路径,因为access_control 假定他仍然是“常规”
- 他必须重新登录,然后access_control才允许他访问对象创建路径。
我该怎么做才能将数据库更改应用于会话,而无需注销?
我觉得this question和你的很像。接受的答案是:
$user = $this->getUser();
$user->addRole('ROLE_ADMIN');
$this->get('fos_user.user_manager')->updateUser($user);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.context')->setToken($token);
我和 Symfony 的选民一起去了:https://symfony.com/doc/current/security/voters.html
没有注销的安全角色无法实现。
我的用户提供商设置为用户实体。
该实体有 getRoles() 模型并且它工作正常。
我的问题是:
- 网站中有两个用户角色(Admin 和 Regular)
- 普通用户无法访问对象创建(access_control 设置为只有管理员才能执行此操作)
- 用户登录时仍具有“常规”角色
- 我去编辑数据库中的“常规”用户并将其设置为'Admin'
- 用户仍处于登录状态,access_control 仍将其视为“常规”
- $this->getUser()->getRoles() 具有“Admin”角色。
- 用户仍然无法访问对象创建路径,因为access_control 假定他仍然是“常规”
- 他必须重新登录,然后access_control才允许他访问对象创建路径。
我该怎么做才能将数据库更改应用于会话,而无需注销?
我觉得this question和你的很像。接受的答案是:
$user = $this->getUser();
$user->addRole('ROLE_ADMIN');
$this->get('fos_user.user_manager')->updateUser($user);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.context')->setToken($token);
我和 Symfony 的选民一起去了:https://symfony.com/doc/current/security/voters.html
没有注销的安全角色无法实现。