FOSUserBundle重新加载用户

有的时候,会因为某种原因,需要变换用户的角色,并实时生效。例如,用户因某些行为(变为高级会员),提高了自己的权限,程序配给它一个新的角色,这就需要程序立即更新这个用户,让用户立刻享有自己的职能。

或者有些会员违反了,网站的规定,网站及时将其降权,防止此会员的恶意行为。这都需要角色变换后的及时更新,也就是对用户的重新加载。

在User Entity下手

很简单,只需要用到EquatableInterface接口,在这个接口中有一个函数isEqualTo,我们实现了它就可以了:

这个方法返回ture等于用户没有变动,如果返回false就会重新加载用户。

 

如何使用

来到indexAction,确保你的程序已经登录。并且登录用户不存在“ROLE_ADVANT”角色

twig模板要加入判断以便演示(当然也可以查看debug工具中的security):

ok,你已经成功的重新加载了用户。

 

注意:在indexAction中不要加入$this->isGranted(“ROLE_XXX”),来做判断,否则重新加载不会启用。

当然,还有别的方法。例如,重新生成Token

这个文章可供参考:

How to reload your User after changes in Symfony2

 

发表评论