我目前正在构建一个ASP.NET MVC 5 EF6博客Web应用程序。
我有两个数据库和上下文:
- 我的应用程序的实际数据的数据库(博客文章,博客类别,标签等)。
- 用于身份验证和成员身份的数据库(用户和角色)。
我可以使用BlogPostcontroller中的authorize属性授权给定用户添加/编辑/删除博客帖子的权限: [授权(角色=”管理员,作者”)] 它运作得很好..
我的目标:让我们想象一下,我想授予用户添加/编辑/删除所有博客帖子或博客类别的子集的权利(仅限于“烹饪”和“旅行”博客类别)。
我开始考虑在用户和博客类别实体之间创建导航属性,但实体框架不支持两个独立数据库之间的外键。
你们想知道这个问题的解决方法吗?
非常感谢您的帮助。
答案 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可能会证明太多。在这种情况下,只需使用基于声明的授权。