2008-12-19 84 views
8

我正在研究在我的ASP.NET应用程序中构建身份验证,并符合以下要求。ASP.NET:权限/身份验证体系结构

  • 用户具有正好一个角色(即管理,销售经理,销售,....)
  • 角色具有一组权限以访问CRUD现有对象的子集。即 “销售具有对象类型”产品“但不删除的CREAD,READ,WRITE权限”
  • 不知何故,我喜欢将权限置于具有继承的层次结构中,以便我为ie Admin无需指定所有可用对象。
  • 系统必须迅速能够回答这个问题:“是否用户X具有相应的权限y以反对Z”
  • 所有的数据库管理(MSSQL),在C#中实现/ ASP.NET

我想获得关于这些要求的反馈?任何想法如何实现这个使用ASP.NET框架(尽可能)? (但是,我也很想知道如何在没有成员资格的情况下实现这一点)

回答

6

我想你需要做的是在业务对象或控制器中实现一组权限查询方法。示例:CanRele(),CanEdit(),CanDelete()

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

我想不出一种集中定义这些权限的方法。他们需要分配到功能的实施。但是,如果您想改进设计,则可以使用依赖注入将授权者插入到业务对象中,从而保持实现的独立性。

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

1

自ASP.NET 2.0开始提供的成员资格API应该很好地满足您的要求。我担心的唯一不直接支持的是等级角色。但是,您可以轻松地使用普通的基于角色的安全性与另一个手动编写的分层角色表来实现所需的内容

2

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

我正在自己的系统上工作,一旦我对此感到满意,我会写博客。

0

我将建立用户/角色关系,使用户可以有更多比1层的作用。我发现1-1的关系,我感到紧张,因为我知道即使我们现在看不到这种需求,某个人总有一天会想要某个人既是销售用户又是客户服务用户。

在我们的客户系统中,我们使用角色对像“delinquentCustomer”这样的东西进行分层。这样,原始许可仍然有效 - 只要他们支付账单。值得考虑这种方法。