以银行为例: 1. 客户 - 例如:银行1、银行2、银行3、银行4。 2. 分行州 - 例如:州1、州2、州3、州4。 3. 分行地区 - 例如:地区1、地区2、地区3、地区4。 4. 设施 - 支票、直接借记、定期指令等。
当用户登录时,他将只能看到一些客户、一些州分行、一些地区分行,这取决于在用户管理应用程序中分配给他的分行、设施等。这些针对不同的用户进行更改。
请问是否有任何标准工具可用于此级别的授权或者如果没有,哪种数据库模型最好?
您需要实现自己的授权
机制,您需要创建一个控制表,用于存储用户访问级别(假设很多事情),例如:
UserAuthorization (UserId, EntityId, EntityType)
用户Id:指向用户的引用。
实体Id:您想授予访问权限的元素的Id。
实体类型:您想授予访问权限的元素类型(客户端、州、地区、设施)。
+--------+----------+------------+
| UserId | EntityId | EntityType |
+--------+----------+------------+
| 1 | 2 | CLIENT |
| 1 | 2 | STATE |
| 1 | 3 | DISTRICT |
+--------+----------+------------+
您可以查看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 进行一些自定义设置。传递你想要编辑银行等方面的声明(claim),然后它将检查你是否具有访问该特定银行的权限。我认为你必须在CheckAccess方法中为ACL执行逻辑。
还要看看http://thinktecture.github.com/Thinktecture.IdentityModel.45/
我还发现了以下帖子http://leastprivilege.com/2012/06/24/approaches-to-server-side-authorization/ - 请阅读Lucero最后的建议。基本上就是如上所述
感谢回复。请查看样本数据。它可以达到三个/n个级别。
User1d 用户名
USR1 John
USR2 William
USR3 Joseph
USR4 Mathew
USR5 George
客户端ID 客户端名称
CL1 Barclays
CL2 LLoyds TSB
CL3 Natwest
CL4 Nationwide
CL5 HSBC
国家编号 国家名称
CON1 England
CON2 Wales
CON3 Scotland
CON4 Northern Ireland
国家ID 城市ID 城市名称
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
国家编号 城市编号 分支机构编号 分支机构名称
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 国家ID 城市ID 分支机构ID
USR1 CL1 CON1 CTY1 BRC1
USR1 CL1 CON1 CTY1 BRC2
USR2 CL2 CON1 CTY1 BRC1
USR2 CL2 CON1 CTY1 BRC2