我正在开发一个内部Web应用程序(只有员工可以登录)并需要一些帮助来找出处理单个用户对系统权限的好方法。
系统本身位于C#/ ASP.NET(4.0 / Webforms / Forms Authentication)/ SQL Server 2008中,并且有几个不同的区域,它们具有不同的权限集。您可以在基本的crud场景(创建,查看,更新,删除)中考虑它,尽管这些场景适用于系统的不同方面。
(我想提一下这不是一种CMS系统,所以我不能选择像DotNetNuke这样的开源项目。这是从零开始开发的。我可以使用开源库,如果它们是尽管如此。)
为复杂系统设计用户权限系统有什么好方法,可能有5-6个不同的部分,每个部分包含10-15个不同的视图/更新/删除?
这里的目标是:
有两种方法可以想到:
方法1:
尝试使用内置的ASP.NET Roles系统来定义不同的权限并从那里进行管理。我可以构建自定义页面来处理不同的区域并为用户分配权限集。我相信这也允许我默认使用当前会话对象来包含系统中用户的所有权限。 (HttpContext.User.IsInRole()等...)。
现在,虽然我认为这种方法可行,但我不确定维护或适应未来需求会变得容易。看起来它是更快速的方式来实现它并且工作但不是最好的长期。
方法2:
滚动我自己。在这个场景中,我设置了数据库表来存储应用程序每个部分的真/假样式权限。然后,我将检索该信息并将其放入会话中,并在我需要检查某人是否有权执行某些操作时随时访问它。然后我会构建自定义页面来管理列表等。
似乎这种方法可能是更易维护的长期解决方案。它为我提供了更多的功能以及如何处理它。但是,我基本上还在做着Roles系统在方法1中为我提取的工作。不过,我仍然倾向于采用方法1。
最后,我不确定这两种方法是否是处理此问题的最佳方法。任何人都可以帮我解释为什么上述任何一种都是好/坏?或者甚至建议一个不同的替代方案来处理它的“最佳”方式实际上是。这是我在这方面的第一个主要任务,所以我没有太多的经验来尝试通过权限来“保护”这样的应用程序。任何和所有的帮助表示赞赏!
答案 0 :(得分:2)
使用内置方法,除非您有特定的架构需要。如果您不使用内置的实现,您可以选择推出自己的提供程序实现,但是您应该遵循与内置系统相同的模板,因为它涵盖了您应该考虑的许多安全警告。 / p>
甚至还有内置的配置页面,用于快速和脏的用户维护。
答案 1 :(得分:0)
我会坚持使用内置方法,您可以随时编写自定义RoleProvider
以匹配您的用户群所需的角色和权限(Implementing a RoleProvider)