我必须开发一个用户管理应用程序。我需要在数据级别Ex:
中授权用户以银行为例:
当用户登录时,他将只能看到一些客户端,一些州分支机构,一些地区分支机构依赖于在用户管理应用程序中分配给他的分支机构,设施等。这些更改针对不同的用户。
请任何人可以帮助我获得这种级别的授权任何可用的标准工具,或者如果没有,那将是什么样的优秀数据库模型?
答案 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