Asp.net mvc 3 MVC3访问控制器外部的用户配置文件数据

Asp.net mvc 3 MVC3访问控制器外部的用户配置文件数据,asp.net-mvc-3,Asp.net Mvc 3,在我们新的非常大的MVC3应用程序中,我们需要解决一个安全问题。我们的结构是,对于每个控制器,有一个viewModel和一个viewModelGenerator类。viewModelGenerator类负责根据需要从尽可能多的数据表构建viewModel 我们的问题是,每个用户只能看到他们“办公室”的数据。因此,我们必须将用户的“office”信息传递给每个viewModelGenerator 是否有一种方法可以访问用户配置文件数据,而不必将其作为控制器的参数传递?我可以通过构造函数传递值,但我

在我们新的非常大的MVC3应用程序中,我们需要解决一个安全问题。我们的结构是,对于每个控制器,有一个viewModel和一个viewModelGenerator类。viewModelGenerator类负责根据需要从尽可能多的数据表构建viewModel

我们的问题是,每个用户只能看到他们“办公室”的数据。因此,我们必须将用户的“office”信息传递给每个viewModelGenerator


是否有一种方法可以访问用户配置文件数据,而不必将其作为控制器的参数传递?我可以通过构造函数传递值,但我们正在寻找一种更干净的方法。我看到过关于如何获取用户身份的帖子,但没有看到完整的配置文件。

我唯一的想法是创建一个共享的父视图模型,其中包括用户配置文件作为公共字段

因此,创建一个BaseViewModel并将每个ViewModel设置为从BaseViewModel继承。ViewModelGenerator中唯一的更改应该是您需要在构造函数中为UserProfile设置适当的值

我在这里使用public是为了易用性,但如果是出于安全考虑,可能至少会使用受保护的getter和setter。类似于:

public class ViewModel1 : BaseViewModel {   
    public ViewModel1 ()
      :base(UserProfile profiledata){
           //Constructor code for ViewModel1   
    } 
}
在BaseViewModel中:

public class BaseViewModel{
   public UserProfile profile;    
   public BaseViewModel(UserProfile prof){
      profile = prof;
   }
}
我们的结构是,对于每个控制器,都有一个viewModel

那是一个错误的结构。每个视图应该有一个视图模型,而不是每个控制器都有一个视图模型

有没有一种方法可以访问用户配置文件数据而无需通过 是否将其作为控制器的参数

否,并且不建议使用提取此类数据的服务层。此数据必须从其所有者(即UI层)推送到服务层


也就是说,在ASP.NET MVC中,有更多的MVCish方法来实现用户授权。一个示例是编写一个自定义的
[Authorize]
属性,该属性将在每次操作之前执行,并将验证用户是否有权访问信息。

此级别的安全性不受关注。我要寻找的是一种不必使用来自控制器的构造函数调用就可以传递概要文件的方法。如果可能的话。你的结构是正确的。这并不完全是我们正在做的,但我简化了结构,提出了问题。我接受了您关于自定义属性的想法,并提出了一种干净的方法,使用接口和基类通过控制器将数据推送到viewModelGenerator。谢谢你的主意