根据用户授权构建菜单

时间:2014-08-14 13:18:57

标签: c# asp.net-mvc entity-framework asp.net-identity

我有一个来自另一个应用程序的实体项目正被带入一个新的MVC Web应用程序。我希望网络用户只能访问一些实体的某些实例。例如,我们有四层组织实体:公司,网站,项目,包。我希望用户X可以访问两家公司,这些公司下的一些网站等等。

我目前已将与身份相关的数据库架构添加到托管实体的数据库中,并且Identity正常运行。我遇到的问题是将用户连接到其他实体。我有用户和实体表之间的联结表(例如Users_Companies)。遗憾的是,这些联结表不能被EF用于处理用户和实体之间的关系,因为它们位于不同的项目中并使用不同的上下文。

我希望通过使用存储过程只返回表示用户有权访问的所有实体的多个结果集来缓解这种情况,但这要求我将实体存储在DTO中,因为使用实体类本身将导致导航属性在视图中获取枚举上的所有子实体。

这怎么办?我必须假设具有属于特定用户或可由特定用户查看的特定实例是一个相对正常且经过良好遍历的想法。我应该重新创建我的实体并将它们放在Web项目中吗?每次添加错误修复或新功能时,我都必须更新实体类的每个副本。

1 个答案:

答案 0 :(得分:0)

您可以在“业务”项目的DbContext中定义ASP.Net Identity实体,并在下面的内容中使用以下内容来获取MVC应用中的IdentityUser:

var usermanager = new UserManager<User>(new UserStore<User>(new MyBusinessDbContext));
var identityUser = usermanager.FindById(myUserId);

请注意,User类是您的Business项目的一部分,这意味着您必须将MVC项目中的ApplicationUser定义移至您的业务项目