c# - 使用 Entity Framework 4.1 处理应用程序权限的策略

标签 c# asp.net-mvc entity-framework-4

首先,我使用 EF 4.1 并利用存储库和工作单元模式。我们正在构建一个网络应用程序。

我正在使用 EF 4 的 Code First 方法开始我的项目。目前,数据库不存在。因此,我试图提出一种策略来处理用户可以访问哪些数据以及该逻辑应位于我的框架中的位置。

假设用户登录系统并想要为系统创建用户。该表单有一个字段可以让新用户担任某种角色。负责创建此“新用户”的用户只能看到某些类型的角色(用户、创建者和查看者),但我们知道存在管理员角色,但该用户无权访问它。当我调用服务来提供角色列表时,我是否想要撤回所有角色,然后基于某种权限集构建一个新列表?

我正在努力考虑在我的存储库中保留一些这样的逻辑,但真的不认为它适合那里。

最佳答案

安全性应该是多个级别的,但我认为所有级别都会高于存储库。您的 UI/菜单不应公开用户无权访问的功能,但您还应该检查服务器,可能在用户有权访问以执行他们正在尝试的操作的应用程序服务层中。

对于用户角色,您可以将角色关系构建到数据模型中,但我会将它们全部从数据库中带回并缓存它们并使用代码逻辑过滤列表。但问题是您如何知道用户可以添加或不添加哪些角色?您可以使用特定的数字,留出间隙,并且只允许特定角色的人员创建等于或小于其自己角色的角色的用户。

例如:

RoleID    Role
     1    Peon
     5    Common Folk
     10   King
     15   Supreme Master of the Universe

所以也许只有 Kings 和 SMU 才有能力添加新用户。 SMU 可以创建其他 SMU、国王、平民和苦工。除了 SMU 之外,国王也可以做同样的事情。 ID 中的间隙使您能够稍后添加更多角色,而无需重新编号。

关于c# - 使用 Entity Framework 4.1 处理应用程序权限的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515436/

相关文章:

mysql - 在 mysql 中查看查询的隔离级别

c# - Entity Framework .Where 方法链接

c# - 在管理员帐户中运行 Visual Studio 时无法触发拖放事件

c# - 隐藏 WPF 窗口中的所有按钮

asp.net-mvc - 在生产代码中保留 MiniProfiler 的 ProfiledDbConnection 是否安全?

javascript - 为什么我无法从 javascript 访问我的模型对象

c# - 如何列出 N 值集的所有可能组合,其中每个值都来自使用 C# 的固定值子集?

c# - HashAlgorithm.ComputeHash() 是有状态的吗?

javascript - 当 JavaScript 更改元素属性时,CSS 是否应该更新?

c# - ReferentialConstraint 中的依赖属性映射到存储生成的列。列 :