0

我想使用内置的 ASP.NET 成员机制,但对我来说似乎还不够。它只允许人们做一堆任务(角色)。我可以允许一个人,但似乎很难拒绝一个人,即;让会计部门的人。查看敏感信息,但如何拒绝该部门的特定人员?我必须创建 AccountDept 和 AccountDeptNoSensitiveData 角色等等......如果有很多活动,那将是一团糟。

在我的情况下,具有允许/拒绝机制的旧经典组和用户要好得多。但是,如果有的话,我不想重新发明以前已经发明的东西,这就是我在这里要求的:

对于基于表单的身份验证,是否有任何 ASP.NET 成员机制的扩展变体或另一个好的“框架/样板/现成的”允许我授权/拒绝人们在我的应用程序中执行任务?

4

4 回答 4

1

基于声明的授权可能正是您想要的。用户不是具有特定角色和角色附带的所有授权,而是携带一个声明,这可以启用更精细的允许/拒绝检查。

来自MSDN

这比通过纯 RBAC(基于角色的访问检查)提供的粒度要大得多,其中许多权限通常收集在单个角色下。也许,更重要的是,基于声明的授权可以更好地分离业务逻辑和授权策略,因为代码中对资源的特定操作可以要求许可,并且后端策略可以用于配置呈现实体必须拥有的声明为了满足需求。

这是一个来自 .NET Rocks 的非常好的播客,可以让您熟悉该主题:Dominick Baier 带领我们了解基于声明的安全性!.

在 ASP.NET 4.5 中,当使用命名空间的表单身份验证时,核心框架能够执行基于声明的授权System.Security.Claims。该Page.User对象可以强制转换为ClaimsPrincipal. 您可以检查委托人的主张并据此做出决定,即是否允许执行某项操作。有关ClaimsAuthorizationManager如何在 ASP.NET 中完成此操作的说明,请参阅参考资料。

您的代码可能会变得更复杂,但与尝试在多个角色定义中匹配所有可能的授权组合相比,它应该不那么令人头疼。

于 2012-12-11T21:48:54.367 回答
1

在我看来,有一个缺失的部分是下一个层次 - 权利或操作。授权管理器有这些,但没有原生 API。使用基于 AzMan com 的 API 是邪恶的。

本质上,当您想做某事时,您会检查用户是否具有给定的权限。这些权限收集在您分配给用户的角色中。这使您可以精细地控制角色可以做什么,而无需数以百万计的角色。

可悲的是,我不知道有任何东西可以为您提供“权利 API”。我为我的应用程序创建了自己的应用程序,而且我看过的大多数应用程序似乎都是自己推出的。

于 2012-12-11T21:49:11.093 回答
0

也许我可以继续使用内置的 ASP.NET 成员资格提供程序并将角色用作组,并且不再询问“角色中的用户”:

 User.Identity.IsAuthenticated && Roles.IsUserInRole(user, role)

相反,我可以添加任务列表和权限列表,如下所示:

 Tasks
    Task1    name="Accounting"
       Allow roles="Accounting", "Executive"
       Allow users="SalesPerson1", "OtherPerson2" //Granted people
       Deny  users="AccountingPerson1" //Banned person

并征求用户许可

  User.Identity.IsAuthenticated && MyCustomSecurity.HaveRight(user, task)

好的,有人已经做了我提到的事情:

http://permissionmanager.codeplex.com/

于 2012-12-12T12:05:48.060 回答
0

要回答您的问题,基本上有两种方法可以允许/拒绝用户访问资源或执行特定活动。

  1. 禁用所有内容或禁止所有内容(所有控件或组件),然后通过权限授予访问权限以打开可能性。这种方式是最安全的方式,除非他/她已被授予该操作,否则用户将无法做任何事情。
  2. 默认情况下允许一切,然后分配限制以禁止或禁用操作。这是更快的方法,在这种情况下,您需要通过权限创建更少的限制

ASP.net 成员资格是一项在粒度、安全性、操作审核等方面受到限制的功能,如果时间不受限制,您仍然可以扩展它。

于 2015-08-07T09:45:11.033 回答