Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#应用程序中处理不同用户角色的推荐方法是什么?_C#_.net_Winforms_User Roles - Fatal编程技术网

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

在C#应用程序中处理不同用户角色的推荐方法是什么?,c#,.net,winforms,user-roles,C#,.net,Winforms,User Roles,我将为一家企业制作一个小型应用程序,它将在本地用于扫描文档,并将文档存储在位于本地计算机或位于同一局域网的计算机上的数据库中 我可以使用用户名和密码创建一个名为Users的表,并根据usertype ID显示一个表单或另一个表单。但我对经验丰富的程序员推荐的方法更感兴趣 有什么建议吗 编辑:我正在寻找一种足够安全,但也足够可扩展的东西 我可以创建一个名为Users的表 使用用户名和密码以及 根据用户类型ID显示一个 形式,或另一种形式 听起来对我来说是个合理的选择。记住把密码散列 我还将对表单中

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

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

有什么建议吗

编辑:我正在寻找一种足够安全,但也足够可扩展的东西

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

听起来对我来说是个合理的选择。记住把密码散列


我还将对表单中的公共控件进行组件化,以便您可以重用公共部分。

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

< P>即使我不能认为自己“老练”,我会给出我的答案,因为我面临着同样的问题在这些星期。< / P> 我将定义一个权限掩码,以便识别允许的操作,将其与角色组关联,然后将用户与组关联。权限掩码越完整,组定义中允许的粒度就越大

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

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

尽管面向ASP.NET,但我还是建议您仔细阅读本文:

您可以使用内置的成员身份和角色对象(甚至在桌面应用程序中)定义自己的权限模式。使用此功能可以省去为用户(和角色)表创建自己的数据库条目的麻烦,同时还可以为您处理密码哈希(从而使应用程序更加安全)

最后,请阅读MSDN官方文章:

关于“成员资格”:


关于“角色”:

如果只是一个简单的应用程序,不要使用宇宙飞船穿越马路

创建以下DB架构:

用户:用户名和散列密码

角色:角色名称、角色ID、角色长度(int)

Rolemembership:Rolemembership表,其中包含用户ID和roleid,以允许将来的多个成员身份

设置角色时,为其指定数值权重。ie:Admins=1000,超级用户=500,来宾=10。这样,在您的表单上,您可以说,如果用户级别为500或更高,请设置完整视图,否则设置仅查看或不访问

更好的方法是,使用一个安全类,使用isPowerRuser或IsAdmin等方法将其抽象出来


它简单、可读且可重用。

在WinForms中使用ASP.Net提供程序是不安全的:。@Groo:对于任何在本地处理数据的系统,都可以提出相同的论点,尽管您可以通过在LAN上运行它来回避这一点。您可以很容易地使用ACL来避免授予用户实际替换任何可执行文件的权限,但是如果您的用户都有足够的技能来完成这项工作,并且有足够的动力来突破,对于大多数本地解决方案,您仍然几乎注定要失败。小型企业在本地使用的小型应用程序听起来不像需要Fort Knox security;)