8

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

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

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

4

5 回答 5

6

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

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

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

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

于 2008-12-19T22:00:01.373 回答
2

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

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

于 2009-06-16T13:13:19.370 回答
1

从 ASP.NET 2.0 开始提供的会员 API 应该可以很好地满足您的要求。恐怕它唯一不直接支持的是分层角色。但是,您可以轻松地使用基于角色的普通安全性和另一个手动编写的分层角色表来实现所需的事情。

于 2008-12-19T08:19:42.237 回答
1

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

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

通过扩展生成的数据库和过程可以轻松管理层次结构。

于 2008-12-19T08:21:37.163 回答
0

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

在我们的客户系统中,我们使用角色对诸如“delinquentCustomer”之类的内容进行分层。这样,原始权限仍然有效——只要他们支付账单。值得考虑这种方法。

于 2010-04-12T14:07:27.720 回答