ASP.Net MVC中的数据级授权3

时间:2012-12-21 14:14:57

标签: asp.net sql asp.net-mvc-3

我必须开发一个用户管理应用程序。我需要在数据级别Ex:

中授权用户

以银行为例:

  1. 客户 - 例如:Bank1,Bank2,Bank3,Bank4。
  2. 分支机构状态 - 例如:Stat1,State2,State3,State4
  3. 分行区 - 例如:District1,District2,District3,District4
  4. 设施 - 支票,直接付款,常规订单
  5. 当用户登录时,他将只能看到一些客户端,一些州分支机构,一些地区分支机构依赖于在用户管理应用程序中分配给他的分支机构,设施等。这些更改针对不同的用户。

    请任何人可以帮助我获得这种级别的授权任何可用的标准工具,或者如果没有,那将是什么样的优秀数据库模型?

3 个答案:

答案 0 :(得分:5)

您需要实现自己的Authorization机制,您需要创建一个控制表来存储用户访问级别(假设很多事情),例如:

UserAuthorization (UserId, EntityId, EntityType)

UserId :对用户的引用。

EntityId :您要授予其访问权限的元素的ID。

EntityType :您要授予访问权限的元素类型(客户,州,区,工厂)

+--------+----------+------------+
| UserId | EntityId | EntityType |
+--------+----------+------------+
|      1 |        2 | CLIENT     |
|      1 |        2 | STATE      |
|      1 |        3 | DISTRICT   |
+--------+----------+------------+

您可以使用并且应该使用整数来表示EntityType,我只是为了示例而将其写成文本。

答案 1 :(得分:1)

您可以查看ClaimsPrincipal并使用基于声明的授权。在.Net 4.5中集成了WIF。可在此处查看摘要http://msdn.microsoft.com/en-us/library/ms729851.aspx

您可能必须围绕系统中的每个实体创建访问控制列表。最终,您需要有一种简单的方法来唯一地定义我认为使用GUID的实体。然后要求对该GUID提出索赔。您显然可能会变得更复杂,并且需要读取,写入类型权限。如果您直接为每个实体授予访问权限,您可能会收到大量索赔。

最终,您是否希望定义各个实体的访问权限?某种分组可能更好?如果您可以管理银行,您可以管理其所有州,如果您管理其所在地区,您可以管理所有地区分行等。

我会尝试将用户分组,然后为这些组分配访问权限。在NTFS中管理文件时,很少发现自己授予对单个文件的访问权限。

如果您授予某人实体组的权限,请先进行某种组检查,如果他们没有该声明,请进行实体检查。

可能需要使用http://msdn.microsoft.com/en-us/library/system.security.claims.claimsauthorizationmanager.aspx做一些自定义内容。通过声明您想要编辑银行等,然后它会检查您是否拥有该特定银行的许可。我认为你必须在CheckAccess方法中为ACL做逻辑。

另请查看http://thinktecture.github.com/Thinktecture.IdentityModel.45/

我还发现了以下帖子http://leastprivilege.com/2012/06/24/approaches-to-server-side-authorization/ - 最后阅读了Luceros的建议。基本上如上所述

答案 2 :(得分:0)

感谢您的回复。请查找示例数据。它可以达到三个/ n个级别。

User1d UserName

USR1      John    
USR2      William
USR3      Joseph
USR4      Mathew
USR5      George

ClientId ClientName

CL1         Barclays
CL2         LLoyds TSB
CL3         Natwest
CL4         Nationwide
CL5         HSBC

CountryId CountryName

CON1        England
CON2        Wales
CON3        Scotland
CON4        Northern Ireland

CountryId CityId CityName

CON1        CTY1      Liverpool 
CON1        CTY2      Waterloo
CON1        CTY3      Piccadilly
CON2        CTY4      Cardiff   
CON2        CTY5      Ammanford
CON2        CTY6      Abergele
CON3        CTY7      Glasgow
CON3        CTY8      Edinburgh
CON3        CTY9      Aberdeen
CON4        CTY10     Belfast
CON4        CTY11     Hannahstown
CON4        CTY12     Springfield

CountryId CityId BranchId BranchName

CON1        CTY1      BRC1        Branch1
CON1        CTY1      BRC2        Branch2
CON1        CTY1      BRC3        Branch3
CON2        CTY4      BRC4        Branch4
CON2        CTY4      BRC5        Branch5
CON2        CTY4      BRC6        Branch6

UserId ClientId CountryId CityId BranchId

 USR1      CL1         CON1        CTY1      BRC1        
 USR1      CL1         CON1        CTY1      BRC2        
 USR2      CL2         CON1        CTY1      BRC1
 USR2      CL2         CON1        CTY1      BRC2