当我更改数据库时,为什么我的自定义角色提供程序不会更新角色?
我正在使用 ASP.NET MVC 构建一个小型 CMS 系统,并且我有一个自定义角色提供程序,使用由使用 Castle Windsor 实现的工厂实例化的 userRepository。
具有管理员权限的人可以使用后端管理更改保存在数据库中的用户角色。
但是,每当我登录刚刚更改角色的用户(目前我使用测试用户)时,角色都不会更新。我尝试注销并再次登录,但没有结果 - 我使用的角色保持不变。我也尝试清除浏览器的缓存和cookie,再次没有结果。
数据库中的数据已正确更新。
我尝试输出登录用户的角色,因此我可以查看自定义角色提供程序中的数据是否已更新,但角色提供程序中的数据看起来保持不变。显然,角色提供者没有在每个请求上从数据库获取数据。
有趣的是,如果我改变角色并重新发布我的网站,这种改变就会按原样发生。它只是不是每次都重新发布我的网站的选项,管理员会更改用户的角色。那不是很有活力。
关于为什么会发生这种情况以及如何解决它有什么想法吗?
I am building a small CMS system with ASP.NET MVC and I have a custom role provider using a userRepository instantiated by a factory implemented using Castle Windsor.
Someone with admin privileges can change the roles of a user, saved in a database, using the back-end administration.
But whenever I log onto the user for whom I just changed the roles (I use test users for the moment), the roles are not updated. I tried logging out and in again, with no result - the roles of my used remain the same. I also tried clearing the cache and cookies of the browser, with again no result.
The data is correctly updated in the database.
I have tried outputting the roles for a logged in user, so I could see if the data was updated in the my custom roleprovider, but the data in the roleprovider remains the same it seems. So apparently the roleprovider is not getting the data from the database on each request.
The funny thing is that, if I change a role and republish my website, the change bahaves as is should. Its just not an option to republish my website each time, an admin change the role of a user . thats not very dynamic.
Any ideas on why this occurs and how I can fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我猜测您的角色提供者是单例,这是温莎的默认生活方式,因此根据您的实现方式,它可能保存在第一个请求时提取的数据。
使其为 PerWebRequest 或瞬态。
有关生活方式的更多详细信息,请参阅文档。
I'm guessing your role provider is a singleton, which is the default lifestyle in Windsor, hence depending on how you implemented it, it likely holds the data it pulled on the 1st request.
Make it PerWebRequest or transient.
See the documentation for more details on lifestyles.