2012-12-11 36 views
0

我想使用内置的ASP.NET成员资格机制,但对我来说似乎还不够。它只允许人们完成一堆任务(角色)。我可以允许一个人,但似乎很难否认一个人;允许会计部门的人员。查看敏感信息,但如何拒绝该部门的特定人员?我必须创建AccountDept和AccountDeptNoSensitiveData角色,等等......如果有很多活动比混乱。允许/拒绝用户执行特定活动的最佳方式是什么?

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

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

回答

1

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

MSDN

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

这是一个很不错的播客从.NET岩石熟悉的主题:Dominick Baier Walks Us Through Claims-Based Security!

在ASP.NET 4.5中,使用表单身份验证和System.Security.Claims名称空间时,核心框架被配置为执行基于权限的授权。 Page.User对象可以投射到ClaimsPrincipal。您可以检查校长的主张并根据该主张进行决策,即是否允许执行某个操作。有关在ASP.NET中如何完成的说明,请参阅ClaimsAuthorizationManager

您的代码可能会变得更加复杂,但它应该少于管理头痛,然后尝试匹配多个角色定义中的所有可能授权组合。

+0

这是我的理解是,索赔更专注于身份验证而不是授权。自从我上次查看索赔以来已经有一段时间了,所以我要去做那件事。 –

+0

@SimonHalsey我添加了一个指向ClaimsAuthorizationManager类的链接,更详细地解释了如何根据声明授权资源。 –

+0

嗯。 ClaimsAuthorizationManager至少有一个checkaccess方法,但它似乎仍然需要某种API将角色的权限绑定。即使所示的示例仅使用组或角色成员身份来确定访问权限。我再一次对WIF并不完全熟悉,但似乎只是另一种方式来做我下面所说的,但以联合的方式。 –

1

在我看来有一个缺失的部分,这是下一个级别 - 权利或操作。授权管理器有这些,但没有它的本地API。使用AzMan基于COM的api是邪恶的。

本质上,当你想做某件事时,你会检查用户是否有权利。这些权利收集在您分配给用户的角色中。这使您可以对角色可以执行的操作进行细粒度的细粒度控制,而无需数百万或角色。

不幸的是,我不知道那里有什么给你一个“权利API”。我为我的应用程序创建了自己的应用程序&我查看的大多数应用程序似乎都在自己的应用程序中。

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/

0

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

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

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

相关问题