ASP.NET:权限/身份验证架构

8
我正在研究在我的ASP.NET应用程序中构建身份验证,具体要求如下:
  • 每个用户只有一个角色(例如:管理员、销售经理、销售员等)
  • 每个角色可以对一组现有对象进行CRUD访问的权限控制。例如:“销售员可以对“产品”对象进行CREAD、READ和WRITE操作,但不能进行DELETE操作”。
  • 希望权限以继承关系的层次结构形式存在,这样就不需要为管理员等角色指定所有可用对象。
  • 系统必须能够快速回答“用户X是否有权限对对象Z执行Y操作”的问题。
  • 使用数据库管理(MSSQL),采用C#/ASP.NET实现。
请问您对这些要求有何反馈?有什么想法可以在ASP.NET框架中实现它们(尽可能地)?(但我也很想知道如何在没有成员资格的情况下实现此目标)。
5个回答

6

我认为您需要在业务对象或控制器中实现一组权限查询方法,例如CanRead(),CanEdit()和CanDelete()。当页面呈现时,它需要查询业务对象并确定用户的授权功能,根据此信息启用或禁用功能。业务对象可以使用角色或其他数据库查询来确定活动用户的权限。

我想不到一种集中声明这些权限的方法。它们需要分布到函数的实现中。但是,如果您想改进设计,您可以使用依赖注入将授权者插入到您的业务对象中,从而保持实现分离。

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


2

我认为最好的实现之一是在这里记录的,可以满足您的要求。唯一的问题是它钩入了NHibernate,但您可以使用此模板创建自己的权限实现,并简单地钩入您自己的事件模型,而不是NHibernates拦截器。

我正在开发这样一个系统,并在满意后会发布博客。


1
ASP.NET 2.0提供的会员API应该非常适合您的需求。我唯一担心的是它不直接支持分层角色。但是,您可以轻松地使用基于普通角色的安全性,并使用手动编写的分层角色表来实现所需的功能。

1

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

它允许您将文件夹/页面等分组为组/用户。我认为您会发现这已经足够了!

通过扩展生成的数据库和过程,层次结构很容易管理。


0

我会建立用户/角色关系,以便用户可以拥有多个角色。我看到了一对一的关系,我感到紧张,因为我知道即使我们现在不需要它,将来也会有人希望某人既是销售用户又是客户服务用户。

在我们的客户系统中,我们使用角色来添加“拖欠客户”之类的内容。这样,原始权限仍然有效--只要他们支付账单。值得考虑这种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接