ASP.NET:权限/身份验证体系结构

时间:2008-12-19 08:17:02

标签: c# asp.net security forms-authentication

我正在考虑在我的ASP.NET应用程序中构建身份验证,并满足以下要求。

  • 用户只有一个角色(即Admin,SalesManager,Sales,....)
  • 角色具有一组CRUD访问现有对象子集的权限。即 “销售对象类型”产品“具有CREAD,READ,WRITE权限但不是DELETE”
  • 不知何故,我喜欢使用继承的层次结构中的权限,以便我不需要指定所有可用对象。
  • 系统必须能够快速回答“用户X是否有权对Y进行对象Z”的问题
  • 所有数据库管理(MSSQL),在C#/ ASP.NET
  • 中实现

我想获得有关这些要求的反馈意见?任何想法如何使用ASP.NET框架(尽可能)实现这一点? (但是,我也有兴趣知道如果没有会员资格可以实现这一目标)

5 个答案:

答案 0 :(得分:6)

我认为您需要在此处执行的是在业务对象或控制器中实现一组权限查询方法。示例:CanRead(),CanEdit(),CanDelete()

当页面呈现时,它需要查询业务对象并确定用户授权的功能,并根据此信息启用或禁用功能。反过来,业务对象可以使用角色或其他数据库查询来确定活动用户的权限。

我想不出一种集中声明性地定义这些权限的方法。它们需要分配到函数的实现中。但是,如果您希望改进设计,可以使用依赖注入将授权程序插入到业务对象中,从而使实现保持独立。

在Rocky Lhotka的书中有一些代码使用了这个模型。新版本尚未在Google中。

答案 1 :(得分:2)

我认为我认为满足您要求的最佳实施之一是here。唯一的问题是这会挂钩到NHibernate,但是您可以使用它作为模板来创建自己的权限实现,并简单地挂钩到您自己的事件模型而不是NHibernates拦截器。

我自己正在研究这样一个系统,一旦我对它感到满意就会写博客。

答案 2 :(得分:1)

自ASP.NET 2.0以来提供的成员资格API应该很好地满足您的要求。我唯一害怕它不直接支持的是分层角色。但是,您可以轻松地将基于常规角色的安全性与另一个手动编写的分层角色表一起使用,以实现所需的功能。

答案 3 :(得分:1)

您可以在此处阅读如何设置ASP.NET成员资格:http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

它允许您将文件夹/页面等分组到组/用户。我想你会发现这足够了!

通过扩展生成的数据库和程序,可以轻松管理无政府主义。

答案 4 :(得分:0)

我会构建用户/角色关系,以便用户可以拥有多个角色。我看到1-1的关系,我感到紧张,因为我知道,即使我们现在没有看到它的需要,有人有一天会想要有人同时成为销售用户和客户服务用户。

在我们的客户系统中,我们使用角色来覆盖像“delinquentCustomer”这样的东西。这样,原始权限仍然有效 - 只要他们支付账单。值得考虑这种方法。