C#身份验证-将UserRole设置为全局变量?

C#身份验证-将UserRole设置为全局变量?,c#,authentication,authorization,C#,Authentication,Authorization,我们的dba有一个用于身份验证的存储过程,只有在验证成功时才返回用户角色 在我的自定义身份验证类中,ValidateUser方法通过实体模型和域服务命中此存储过程,并且由于存储过程在成功验证时返回角色名,因此我已经有了它的一个实例 在自定义RoleProvider中运行GetRolesForUser方法时,我想我可以编写另一个存储过程来再次获取RoleName,但这似乎有点多余,因为我已经检索了角色。我希望能够在ValidateUser方法中缓存用户角色,在GetRolesForUser方法中访

我们的dba有一个用于身份验证的存储过程,只有在验证成功时才返回用户角色

在我的自定义身份验证类中,ValidateUser方法通过实体模型和域服务命中此存储过程,并且由于存储过程在成功验证时返回角色名,因此我已经有了它的一个实例

在自定义RoleProvider中运行GetRolesForUser方法时,我想我可以编写另一个存储过程来再次获取RoleName,但这似乎有点多余,因为我已经检索了角色。我希望能够在ValidateUser方法中缓存用户角色,在GetRolesForUser方法中访问它,然后进入日落。这不仅可以节省编写存储过程的时间,还可以限制应用程序正在进行的数据库调用的数量

想法


斯科特:没错。当您运行自定义RoleProvider时,您已经具有会话状态,可以使用该状态存储“RoleName”的值。。或者,您可以扩展MembershipUser调用以包含“RoleName”的字符串字段,您可以在第一次调用中填充该字段,然后将其分配回context.user


我不建议在这里缓存对象,因为角色将与用户绑定。

您是否有要解决/优化的性能问题?我对以性能为名将授权与身份验证混为一谈持谨慎态度,除非你看到了真正的需要。这种方法没有什么“错误”,但它是意外的行为。不,不是特别的。我只是尝试实现自定义身份验证和自定义角色提供程序,因为我的客户机已经有一个用于所有项目的身份验证和授权的现有数据库。由于他们的SOP是在成功身份验证时返回角色(dbo.Logon存储过程在他们构建的每个数据库中都是标准的-输入username、pw、appID&如果成功,它将返回roleName),所以在我已经拥有角色的情况下,对其进行第二次数据库调用是没有意义的。我扩展了我的用户类(公共部分类user:UserBase)要包含公共字符串UserRole{get;set;}。我不知道如何保存&稍后访问该特定类上的数据。扩展User:UserBase时我错了吗?应该是会员制用户吗?(我最近从LAMP转换成了.NET,请原谅我的无知)。我无法使用会话存储数据,因为这最终将是一个silverlight Out-of-Browser应用程序,因此会话将不可用。它应该是Membership用户,以便您可以在上下文中访问它。知道我是如何做到的吗?我在谷歌上搜索了一下,今天早上花了几个小时试图把它连接起来。似乎我也需要一个定制的会员资格提供商,这就是我真正陷入困境的地方。这里,一个简单的代码示例/演练将是一个赢家。我不想将这些数据存储在数据库中,每个示例都是这样做的。