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

问题描述:

我必须开发一个用户管理应用程序。我需要授权的数据级防爆用户:ASP.Net中的数据级授权MVC 3

以银行例如:

  1. 客户 - 例如:Bank1的,池Bank2,区块3,BANK4。
  2. 分行状态 - 例如:STAT1,状态2,状态3,State4
  3. 分行区 - 例如:District1,District2,District3,District4
  4. 设施 - 检查,直接借记,邮品订购

当用户登录后,他只能看到一些客户,一些州分行,一些地区分行依赖于在用户管理应用程序中分配给他的分行,设施等。针对不同用户的这些更改。

请任何人都可以帮助我这个级别的授权任何标准的工具可用,或者如果不是什么将是良好的db模型呢?

+0

什么你说的是基于实体的授权。 AFAIK,没有任何工具可用,因为创建通用的东西很困难。 –

你需要实现自己的Authorization机制,你需要创建您存储的用户访问级别控制表,(假设很多东西)是这样的:

UserAuthorization (UserId, EntityId, EntityType) 

用户ID:参考给用户。

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

的EntityType:您希望授予访问权限要素(客户,国家,地区,设施)

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

您可以使用,并应使用整数来表示的EntityType的类型,我这样写的文字只是为例。

您可以查看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建议。基本如上

+0

答案太含糊。他期望授权访问个人实体。尽管我围绕索赔编写了十几个应用程序,但我想不出一种简单的方法来模拟这种细致的授权索赔。如果你有一个聪明的想法,请只用更详细的信息来扩展你的答案。 –

+0

关于在实体级别授权通常很容易。这将需要工作:) – GraemeMiller

+0

@GraemeMiller我同意实体级别的授权,增加了数据库设计的复杂性,添加额外的连接/查询来知道列表/编辑/视图的哪些元素,您的存储库/ linq/EF /数据访问代码获取有点凌乱和肥胖,但这是一个开发人员的生活=) – JOBG

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

User1d用户名

USR1  John  
USR2  William 
USR3  Joseph 
USR4  Mathew 
USR5  George 

客户端Id CLIENTNAME

CL1   Barclays 
CL2   LLoyds TSB 
CL3   Natwest 
CL4   Nationwide 
CL5   HSBC 

CountryId国家或地区名称

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 

用户ID客户端Id CountryId CityId BranchId

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