在 C# 应用程序中处理不同用户角色的推荐方法是啥?

Posted

技术标签:

【中文标题】在 C# 应用程序中处理不同用户角色的推荐方法是啥?【英文标题】:What is the recommended way to handle different user roles in a C# application?在 C# 应用程序中处理不同用户角色的推荐方法是什么? 【发布时间】:2011-02-28 19:27:57 【问题描述】:

我将为一家企业制作一个小型应用程序,该应用程序将用于本地扫描,并将文档存储在位于本地计算机或位于同一 LAN 中的计算机上的数据库中。

我可以使用用户名和密码创建一个名为“用户”的表,并根据用户类型 ID 显示一个表单或另一个表单。但我对经验丰富的程序员推荐的方法更感兴趣。

有什么建议吗?

编辑:我正在寻找足够安全但又足够可扩展的东西。

【问题讨论】:

【参考方案1】:

如果只是简单的应用,不要用飞船过马路。

创建以下数据库架构:

用户:用户名和散列密码

角色:RoleName、RoleID、RoleStrength(int)

RolesMembership:包含 userid 和 roleid 的 RolesMembership 表,以允许未来的多个成员资格。

在设置角色时,给他们一个数字权重。即:Admins = 1000,Power-users = 500,guests = 10。这样,在您的表单上,您可以说,如果用户级别为 500 或以上,则设置完整视图,否则,仅查看或不访问。

更好的是,使用带有 IsPowerUser 或 IsAdmin 等方法的安全类将其抽象出来。

它简单、可读且可重复使用。

【讨论】:

【参考方案2】:

即使我不能认为自己“经验丰富”,我也会给出答案,因为这几周我面临同样的问题。

我将定义一个权限掩码以识别允许的操作,将其与角色组相关联,然后将用户与组相关联。权限掩码更完整,组定义的粒度更细。

这样可以为多个用户定义一个权限,这比使用基于每个用户的类型定义角色要好,因为权限掩码可以修改和扩展。

更复杂的方案可能是可能的,它可以允许每个用户的权限覆盖组权限,或层次权限掩码,以便定义能够管理组权限的主管用户。 这些模型的应用取决于所需的可扩展性和系统的用户数量。

【讨论】:

【参考方案3】:

虽然面向 ASP.NET,但我强烈建议您查看这篇文章:http://www.4guysfromrolla.com/articles/120705-1.aspx

您可以使用内置的 Membership 和 Roles 对象(甚至在桌面应用程序中)来定义您自己的权限架构。使用此功能可以省去为用户(和角色)表创建自己的数据库条目的麻烦,同时还可以为您处理密码散列(导致更安全的应用程序)。

最后,您可能想阅读的官方 MSDN 文章:

关于“会员”:http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

关于“角色”:http://msdn.microsoft.com/en-us/library/ff647401.aspx

【讨论】:

【参考方案4】:

如果您使用的是 Visual Studio,我只会使用内置的成员资格提供程序。这将自动处理您的数据库和所有内容。无需重新发明***。

【讨论】:

在 WinForms 中使用 ASP.Net 提供程序并不安全:***.com/questions/1002645/…. @Groo:可以针对任何在本地处理数据的系统提出相同的论点,尽管您可以通过在 LAN 上运行它来绕过它。您可以轻松地使用 ACL 来避免授予用户实际替换任何可执行文件的权限,但实际上,如果您的用户既足够熟练做到这一点并且有足够的动力去突破,那么您仍然几乎注定要使用大多数本地解决方案. 小型企业在本地使用的小型应用程序听起来不像他们需要 Fort Knox 安全性 ;)【参考方案5】:

我可以创建一个名为 Users 的表 用用户名和密码和 根据用户类型 ID 显示一个 形式,或其他形式。

听起来是一个合理的方式来找我。只需记住散列密码即可。

我还会将表单中的公共控件组件化,以便您可以重复使用公共部分。

【讨论】:

以上是关于在 C# 应用程序中处理不同用户角色的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

为不同角色提供资源访问的方法是啥?

Spring Security 推荐的设计以请求用户登录到具有不同角色的不同用户

使多个 Worker 角色实例执行相同工作的推荐方法是啥?

在 mongo 数据库中定义用户角色的好方法是啥

创建基于角色的 Web 应用程序的最佳方法是啥?

在 C# 中处理关联数组的最简单方法是啥?