如何使用角色来分割ViewModels / Controllers / Views

时间:2012-04-01 04:48:46

标签: asp.net-mvc

我正在为一所学校开发一个ASP.NET项目。在一个领域,我希望能够为员工和学生提供几乎相同的视图 - 唯一真正的区别是显示的数据。

对于具有学生角色的用户,他们应该只看到他们自己的数据,而教师应该能够看到他们班级的综合数据(加上潜入看单个学生的数据)。两个用户都可以在几个部分视图之间切换,这些视图以不同的方式表示数据(线图,表格等)

使用MVC模式构建此结构的最佳做法是什么? 基本上它对所有这些都是相同的视图,只有我提取的信息会有所不同。我在这里读到了一些关于两个控制器和一个视图的其他问题,但它们似乎没有我相同的权限要求。

2 个答案:

答案 0 :(得分:2)

看起来SO已经asp.net mvc - dynamic controller based on authenticated user有一个非常好的答案。这基本上允许您基于身份验证创建不同的控制器。通过将数据的可视化表示分成存储在共享目录中的不同部分视图,可以使这更容易,这样不同控制器的视图就可以使用相同的部分视图来提供html。

答案 1 :(得分:1)

如果我核心理解您的问题,您希望使用一个视图,但发送不同的数据。 我不确定这是否是最佳解决方案。在你的情况下,我会创建两个不同的控制器,一个用于学生,一个用于教师,但如果你想使用你提出的建议,我将使用微软的会员提供商。这是一个例子。 这是一个教程和一些示例

http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/

        public ActionResult Index()
        { 
            if (User.Identity.IsAuthenticated)
            {
                MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);

                if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved)
                {
                    var currentUserId = (Guid)currentUser.ProviderUserKey;

                     // get user data maybe somethink like that ....
                    Usser result = (from userdata in b.users
                                       where userdata.Id == currentUserId
                                       select userdata).FirstOrDefault();

                    return View(result);
                }
            }

            return View();
        }