1
|
Brian Scott · 技术社区 · 14 年前 |
1
2
这些记录实际上不是“重复的”。
首先,要了解MembershipProvider和RoleProvider并不相互依赖,只是MembershipProvider.DeleteUser()方法中存在一些问题,稍后我将对此进行解释。 成员身份的作用是对用户进行身份验证,并在身份验证的帮助下保护对资源的访问。 角色的作用是通过角色分配来控制对资源的访问。 这是两个独立的关注点,并不相关,无论aspnet\u用户的状态意味着什么。
突出的问题是,用于连接所有提供者的值是
虽然看起来userId guid是“全局”标识符,但事实并非如此。 因此,需要注意的是,如果您知道与下一步相关的问题,您可以通过对每个成员身份实例使用相同的applicationname,对每个角色实例使用不同的applicationname,来使用具有公共成员身份存储的独立角色提供程序。 我前面提到的(非常愚蠢的)违反关注点分离的行为涉及到调用DeleteUser(deleteRelatedData)时SqlMembershipProvider所采取的操作。然后,SqlMembershipProvider的行为就好像它是这场战斗中唯一的狗一样,通过角色和配置文件来删除只使用它的键的记录,从而丢失了您希望丢失的记录。
“约翰”因某种原因成为“被解雇的人”,并通过会员身份被删除。如前所述,在我们独特的场景中,成员记录被删除,但角色信息仍然保留。
在业余时间,约翰浏览公司内部网,不敢相信他能做多少很酷的事情,作为一个傻瓜,他决定在人力资源模块给自己加薪。
我已经介绍了一个与此非常类似的场景,并提供了一个简单修改的概念证明,以消除此问题 here 和 here .
这两种方法都比实现定制提供者更有吸引力。 干杯,祝你好运。 |