我想使用内置的ASP.NET成员资格机制,但对我来说似乎还不够。它只允许人们做一堆任务(角色)。我可以允许一个人,但似乎很难否认一个人;允许会计部门的人员。看到敏感信息,但如何拒绝该部门的特定人员?我必须创建AccountDept和AccountDeptNoSensitiveData角色等等......如果有很多活动,那将是一团糟。
在我的情况下,具有允许/拒绝机制的旧经典组和用户要好得多。但是我不想重新发明之前已经发明的东西,如果有的话,这就是我在这里要求的:
对于基于表单的身份验证,是否有任何ASP.NET成员资格机制的扩展变体或另一个好的“框架/样板/现成”,允许我授权/拒绝人们在我的应用程序中执行任务?
答案 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)
好的,有人已经做了我提到的事情:
答案 3 :(得分:0)
要回答您的问题,基本上有两种方法可以允许/拒绝用户访问资源或执行特定活动。
ASP.net会员资格是一种在粒度,安全性,操作审核等方面受到限制的功能,如果时间不受约束,您仍然可以扩展它。