我们已经开发了一段代码,基本上返回用户在实体上的权限数据。例如,实体可以是以下之一:
我们可以分配策略(一个人可以有多个策略),允许用户执行某些操作:
我们的应用程序不仅仅是一个简单的“是”或“否”,以确定用户是否可以执行某个操作。我们有“是”、“否”和“仅所有者”(对于只能由所有者编辑/删除的记录)。我们的查询很棒,返回了正确的数据。
我的问题是,在C#中应该使用哪种数据类型来表达以下意思:
给定一个实体(公司),给定一个操作(创建),其价值是什么。基本上,最终我想要构建一个类似于这样的矩阵:
-Company
-Contact
-Project
-Issue etc...
我们可以分配策略(一个人可以有多个策略),允许用户执行某些操作:
-Create
-Edit
-Delete
-Export
基本上,一个策略可能会说用户A有权创建公司,但是另一个相同用户拥有的策略却说他没有创建公司的权利。在这种情况下,我们会考虑允许的权利而不是禁止的权利。在此示例中,他/她将被允许创建公司。
基本上,你最终得到的数据可能是这样的:
Policy1 Company Create Yes
Policy1 Company Edit Yes
Policy1 Company Delete No
Policy2 Company Create No
Policy2 Company Edit Yes
Policy2 Company Delete No
我有一个查询,用来根据我们讨论的规则返回用户的权限。
在这种情况下运行查询,结果如下:
Company create yes
Company edit yes
Company delete no
我们的应用程序不仅仅是一个简单的“是”或“否”,以确定用户是否可以执行某个操作。我们有“是”、“否”和“仅所有者”(对于只能由所有者编辑/删除的记录)。我们的查询很棒,返回了正确的数据。
我的问题是,在C#中应该使用哪种数据类型来表达以下意思:
给定一个实体(公司),给定一个操作(创建),其价值是什么。基本上,最终我想要构建一个类似于这样的矩阵:
Create Edit Delete
Company Yes Owner Only Yes
Contact No No No
Project Yes Yes Owner Only
第一列的行表示实体,此后的列表示动作(创建、编辑、删除)。例如索引的组合:[公司][创建]=是
会根据实体赋予您该操作的权限。
那么什么类型的数据适用于这个模型,使我可以执行像[联系人][编辑]=否
这样的索引呢?我们还需要对此对象进行会话/设计一种方法(可能是动态的),以便根据实体和操作获取结果。
我认为会话是不错的选择,因为我们只需要在用户注销之前检查权限一次。