我将为一家企业制作一个小型应用程序,该应用程序将在本地用于扫描,并将文档存储在位于本地计算机或位于同一 LAN 中的计算机上的数据库中。
我可以使用用户名和密码创建一个名为“用户”的表,并根据用户类型 ID 显示一个表单或另一个表单。但我对经验丰富的程序员推荐的方法更感兴趣。
有什么建议吗?
编辑:我正在寻找足够安全但又足够可扩展的东西。
我将为一家企业制作一个小型应用程序,该应用程序将在本地用于扫描,并将文档存储在位于本地计算机或位于同一 LAN 中的计算机上的数据库中。
我可以使用用户名和密码创建一个名为“用户”的表,并根据用户类型 ID 显示一个表单或另一个表单。但我对经验丰富的程序员推荐的方法更感兴趣。
有什么建议吗?
编辑:我正在寻找足够安全但又足够可扩展的东西。
即使我不能认为自己“经验丰富”,我也会给出答案,因为这几周我面临同样的问题。
我将定义一个权限掩码以识别允许的操作,将其与角色组相关联,然后将用户与组相关联。权限掩码更完整,组定义允许更细化。
通过这种方式,可以为多个用户定义一个权限,这比使用基于每个用户的类型定义角色要好,因为可以修改和扩展权限掩码。
更复杂的方案可能是可能的,它可以允许每个用户的权限覆盖组权限,或层次权限掩码,以便定义能够管理组权限的主管用户。这些模型的应用取决于所需的可扩展性和系统的用户数量。
如果只是简单的应用,不要用飞船过马路。
创建以下数据库架构:
用户:用户名和哈希密码
角色:RoleName、RoleID、RoleStrength(int)
RolesMembership:包含 userid 和 roleid 的 RolesMembership 表,以允许未来的多个成员资格。
设置角色时,给他们一个数字权重。即:Admins = 1000,Power-users = 500,guests = 10。这样,在您的表单上,您可以说,如果用户级别为 500 或以上,则设置完整视图,否则,仅查看或不访问。
更好的是,使用带有 IsPowerUser 或 IsAdmin 等方法的安全类将其抽象出来。
它简单、易读且可重用。
我可以使用用户名和密码创建一个名为“用户”的表,并根据用户类型 ID 显示一个表单或另一个表单。
听起来像是一个合理的方式来找我。只要记住散列密码。
我还将组件化表单中的公共控件,以便您可以重用公共部分。
如果您使用的是 Visual Studio,我只会使用内置的成员资格提供程序。这将自动处理您的数据库和所有内容。无需重新发明轮子。
Although orientated towards ASP.NET, I'd thoroughly recommend checking out this article: http://www.4guysfromrolla.com/articles/120705-1.aspx
You can use the in-built Membership and Roles objects (even in a desktop application) to define your own schemas of privilege. Using this feature takes the hassle out of creating your own database entries for the Users (and Roles) tables, while also handling password hashing for you (leading to more secure applications).
Lastly, official MSDN articles you might want to read:
On "Membership": http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx
On "Roles": http://msdn.microsoft.com/en-us/library/ff647401.aspx