ASP.NET MVC5中单独的应用程序数据库和用户数据库之间的链接

时间:2014-04-09 09:10:54

标签: asp.net-mvc database entity-framework authentication authorization

我目前正在构建一个ASP.NET MVC 5 EF6博客Web应用程序。

我有两个数据库和上下文:

- 我的应用程序的实际数据的数据库(博客文章,博客类别,标签等)。

- 用于身份验证和成员身份的数据库(用户和角色)。

我可以使用BlogPostcontroller中的authorize属性授权给定用户添加/编辑/删除博客帖子的权限:   [授权(角色=”管理员,作者”)] 它运作得很好..

我的目标:让我们想象一下,我想授予用户添加/编辑/删除所有博客帖子或博客类别的子集的权利(仅限于“烹饪”和“旅行”博客类别)。

我开始考虑在用户和博客类别实体之间创建导航属性,但实体框架不支持两个独立数据库之间的外键。

你们想知道这个问题的解决方法吗?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这就是你需要的。 http://typecastexception.com/post/2014/02/19/ASPNET-MVC-5-Identity-Implementing-Group-Based-Permissions-Management-Part-I.aspx 基本上,权限是您配置和关联用户角色所需的权限。

答案 1 :(得分:0)

如果您希望将授权数据与业务数据分开,即在2个单独的数据库中,其中一个包含用户信息和权限,另一个包含您的博客数据,那么您实际想要实现的是外部授权即可。这实际上是一个很好的意图。毕竟,您是否在申请数据中保留了身份验证信息?当然你没有。

不同的框架为您提供外部授权功能。例如,在.NET中,您有claims-based authorization

您还可以采用通用方法并使用可扩展访问控制标记语言XACML。 XACML使用属性(它是基于属性的访问控制模型,而不是简单的基于角色),并将它们组合成策略&定义可能发生的事情的规则。例如,使用XACML,您可以编写以下规则:用户可以编辑他/她拥有的博客帖子

在XACML中,您有一个名为策略决策点(PDP)的授权引擎的概念。 PDP将决策所需的所有信息链接在一起。在您的情况下,它将使用2个独立的数据库并在它们上创建关系。

现在,如果您的用例很简单,那么使用XACML可能会证明太多。在这种情况下,只需使用基于声明的授权。