允许/拒绝用户执行特定活动的最佳方法是什么?

时间:2012-12-11 20:47:38

标签: asp.net

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

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

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

4 个答案:

答案 0 :(得分:1)

基于声明的授权可能是您正在寻找的。而不是用户具有特定角色和角色附带的所有授权,而是用户进行索赔,这可以启用更精细的允许/拒绝检查。

来自MSDN

  

这使得粒度远远超过纯RBAC   (基于角色的访问检查),通常有许多权限   在一个角色下收集。也许,更重要的是,以索赔为基础   授权可以更好地分离业务逻辑和   授权政策,因为可以要求特定的许可   可以使用代码和后端策略中的资源操作   配置呈现实体必须拥有的权利要求   满足需求。

以下是来自.NET Rocks的非常好的播客,以熟悉该主题:Dominick Baier Walks Us Through Claims-Based Security!

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

您的代码可能会变得更复杂,但是在尝试匹配多个角色定义中的所有可能授权组合时,应该减少管理上的麻烦。

答案 1 :(得分:1)

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

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

可悲的是,我不知道那里有什么给你一个“权利API”。我为自己的应用创建了自己的应用程序。我看过的大多数应用似乎都是自己推出的。

答案 2 :(得分:0)

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

 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/

答案 3 :(得分:0)

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

  1. 禁用所有内容或禁止所有内容(所有控件或组件),然后通过权限授予访问权限以打开可能性。这种方式是最安全的方式,除非他/她已被授予该行动,否则用户将无法做任何事情。
  2. 默认情况下允许所有内容,然后分配限制以禁止或禁用操作。这是更快的方法,在这种情况下,您需要通过权限创建更少的限制
  3. ASP.net会员资格是一种在粒度,安全性,操作审核等方面受到限制的功能,如果时间不受约束,您仍然可以扩展它。