2023-02-17 399
我有一个使用’/’默认应用程序名称的单个会员提供程序.然后,我有多个应用程序,它共享此常用会员提供程序配置.每个应用程序都有自己的角色提供程序配置,它们都与成员提供者共享相同的数据库,但使用不同的应用程序名称来隔离彼此的角色.
当我创建成员时,创建一个用户记录,因此在所有应用程序中共享.然后,我使用不同的应用程序名称为每个应用程序创建特定角色.
我所拥有的问题是当我调用Roles.addusertorole时,该成员已经存在. RoleProvider不识别用户作为成员资格和角色提供程序的应用程序名称上下文不同,因此,它需要为角色所属的应用程序名称创建新的用户记录.
如何防止在未在成员和角色提供者之间共享应用程序名称的情况下创建这些重复的用户记录?
记录实际上不是’重复’.
了解提供者之间的关系和ASPNET_USERS表的角色可能有助于清除此功能.
首先,了解empersionProvider和RealProvider不依赖于彼此,在emperenceUpprovider.deleteUser()方法中有一些令人担忧的困难,我将稍后解释一下.
成员资格的作用是验证用户,并且在身份验证的帮助下,保护对资源的访问.
角色的角色是通过角色分配来控制对资源的访问.
这些是2个单独的问题,无论Aspnet_users的状态可能意味着什么,都没有相关.
突出问题是用于连接所有提供程序的值是username. userid GUID是类似的,只为任何用户名创建一个ASPNET_USERS记录,如果所有提供程序都使用相同的应用程序名称,因为每个提供商所做的第一件事是检查aspnet_users for匹配的用户名和应用程序名称.如果找到一个,它将使用它,如果没有,它会创建一个并为UserID分配GUID.
虽然useId guid可能看起来是”全局”标识符,但情况不是这种情况.
所以,使用次要警告 – 您可以通过使用相同的ApplicationName为每个成员身份的应用程序和每个角色实例的应用程序名称用户单独的角色提供程序,如果您知道接下来的问题,则为每个角色实例.
(真的愚蠢)违反了我之前提到的担忧的分离涉及SQLMembershipProvider在调用DeleteUser(DeletEleLateData)时所采取的操作.然后,SQLMembershipprovider就好像它是唯一的狗在战斗中,交叉到角色和档案,以删除它只使用它的键删除记录,因此请注意您期望消失的记录.
考虑:(这是使用上述单个成员的设置,多个角色)
您创建用户”John”的成员资格,为他带来一些角色.您现在必须在Aspnet_Users录制约翰,一切都在游泳. “约翰”是一个经理,并分配了适当的高级角色.
“John”成为某种原因的”解雇人”,并通过成员删除.如前所述,在我们独特的方案中,删除会员记录,但仍然存在角色信息.
聘请新的”约翰”接听电话,为他创建会员用户.
在业余时间,约翰探讨了公司内联网,不敢相信他可以做多少酷炫的东西,因为一个懒人决定在人力资源模块中举起升级.
猜猜是什么?新的”约翰”立即成为经理,由于孤立的角色被关键了”用户名”.
所以,当决定杠杆或在这种情况下,必须了解的”次要”警告,或者在这种情况下,胁迫,内在,测试和已知的提供者堆栈.
我已经介绍了一个非常类似的场景,并提供了一个简单修改的概念证明,以消除这个问题这里和这里.
交替,您可以简单地了解它,并在删除用户时写一些额外的代码来清理.
这两个都是实现自定义提供商的更具吸引力的选择.
欢呼,祝你好运.
以上所述是小编给大家介绍的当使用具有不同应用名称的多个角色提供者时,我如何防止重复的会员用户?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34116.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态