【问题标题】:Overriding SQLMembershipProvider覆盖 SQLMembershipProvider
【发布时间】:2011-02-24 13:51:45
【问题描述】:

.net 框架中是否有内置方法来执行以下操作:

  1. 从用户名/用户 GUID 中获取角色 GUID
  2. 从角色 GUID 获取角色名称

到目前为止,我一直在向 asp_roles 和 asp_users 表发送查询以获取该信息,我想知道是否有更好的方法来做到这一点?

我有以下方法存储在 ASPUtilities 类中:

getRoleGUID(guid userGuid) { LINQ joins }

getRoleGuid(string userName) { LINQ joins  }

getRoleName(guid roleGuid) { LINQ joins  }

编辑:

我刚刚研究了扩展 SQLMembershipProvider 示例。

很少有示例完全覆盖 SQLMembershipProvider,但我认为我感兴趣的只是添加一些额外的方法来使用 LINQ 处理角色。这可行吗?

【问题讨论】:

  • 如果 Role 类暴露了这些,你是否查看过它?
  • 它公开角色名称,但不公开角色 guid。我的主要目标是通过角色名称获取角色指南,反之亦然。
  • 我与 Membership Provider 合作了很多次,想知道您为什么需要角色 guid?
  • 感谢您的回复。我将角色名称传递给控制器​​/网络方法。我需要获取该角色名称的 GUID,以便对其进行处理并将其插入 SQL 数据库中的 SomeActionRole_LINK 表中。

标签: c# .net asp.net roles


【解决方案1】:

如果您扩展 SQLMembership 提供程序,它将执行完全相同的操作,向数据库发送查询以获取该信息,因为角色 ID 未存储在会话中。如果你不想经历那么多麻烦,你可以做一些事情。

  1. 使用您可以调用的这些方法创建一个自定义类,并将返回您角色的 ID。本质上,将所有查询移至一个位置。
  2. 在登录时将角色 ID 存储在会话中。调用您在上面创建的方法一次,不要每次都重新查询。但是,这不是 100% 的安全风险,因为您在会话中存储了一些可能敏感的角色信息,即 id。可能只是过于谨慎了:)

【讨论】:

  • 您好,感谢您的建议。是的,这就是我目前正在做的事情。我不太热衷于将角色存储在会话变量中,因为它将是角色列表,并且用户可以由管理员用户添加/删除角色,因此会话中的信息将不同步.实用程序类似乎是一个合理的选择,我只是不太热衷于从 .Net 类和我自己的类中获取一些数据,但到目前为止似乎找不到替代方案。也许这毕竟不是一个糟糕的实现......
  • 为简单起见并屏蔽从某些 .NET 类和您自己的类获取数据,请在您的 utiltiy 类中使​​用您自己的方法名称包装 .NET 方法。 IE,utilityClass.getRoleName() 返回 httpcontext.current.user.getRoles (或任何调用)。可能有助于清理其中的一些内容,但这确实是这样做的唯一好处。
  • 嘿汤米,谢谢你的想法。它将是“集中式的”,并且控制器/网络方法中不会有太多代码。
猜你喜欢
  • 2011-06-11
  • 2012-01-28
  • 2011-03-19
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多