ASP.Net中的数据级授权MVC 3
我必须开发一个用户管理应用程序。我需要授权的数据级防爆用户:ASP.Net中的数据级授权MVC 3
以银行例如:
- 客户 - 例如:Bank1的,池Bank2,区块3,BANK4。
- 分行状态 - 例如:STAT1,状态2,状态3,State4
- 分行区 - 例如:District1,District2,District3,District4
- 设施 - 检查,直接借记,邮品订购
当用户登录后,他只能看到一些客户,一些州分行,一些地区分行依赖于在用户管理应用程序中分配给他的分行,设施等。针对不同用户的这些更改。
请任何人都可以帮助我这个级别的授权任何标准的工具可用,或者如果不是什么将是良好的db模型呢?
你需要实现自己的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建议。基本如上
答案太含糊。他期望授权访问个人实体。尽管我围绕索赔编写了十几个应用程序,但我想不出一种简单的方法来模拟这种细致的授权索赔。如果你有一个聪明的想法,请只用更详细的信息来扩展你的答案。 –
关于在实体级别授权通常很容易。这将需要工作:) – GraemeMiller
@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
什么你说的是基于实体的授权。 AFAIK,没有任何工具可用,因为创建通用的东西很困难。 –