7

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

以银行为例:

  1. 客户 - 例如:Bank1、Bank2、Bank3、Bank4。
  2. 分支状态 - 例如:Stat1、State2、State3、State4
  3. 分支机构区 - 例如:District1、District2、District3、District4
  4. 设施 - 支票、直接借记、常规订单

当用户登录时,他将只能看到一些客户、一些州分支机构、一些地区分支机构,这取决于在用户管理应用程序中分配给他的分支机构、设施等。这些变化针对不同的用户。

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

4

3 回答 3

5

You need to implement your own Authorization mechanism, you need to create a control table where you store the user access level, (assuming a lot of things) something like:

UserAuthorization (UserId, EntityId, EntityType)

UserId: Reference to User.

EntityId: Id of the element you want to grant access to.

EntityType: Type of element you want to grant access (Client, State, District, Facility)

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

You can use and should use an integer to represent EntityType, i wrote it like text just for the example.

于 2012-12-21T14:44:46.893 回答
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 的建议。基本如上

于 2012-12-21T22:22:56.557 回答
0

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

User1d 用户名

USR1      John    
USR2      William
USR3      Joseph
USR4      Mathew
USR5      George

ClientId 客户名称

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

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  
于 2012-12-25T00:45:48.540 回答