在 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# 应用程序中处理不同用户角色的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章