如何根据登录用户在ASP.NET MVC中的角色创建不同的视图?

时间:2009-10-30 07:00:03

标签: asp.net-mvc url-routing roleprovider authentication

我是ASP.NET MVC的新手,所以需要你帮助解决我的问题:

在我的应用程序中,LogOn将使用用户的角色完成。我有自定义数据库模式(如User,Role,UserInRole等),我使用自定义MembershipProvider和RoleProvider来实现登录。

BTW我正在使用MVC默认帐户控制器本身进行一些修改。我现在想要实现的是,根据登录用户的角色,我想为用户创建不同的视图。

我可以以任何方式使用LogOn操作方法的returnUrl参数吗? (默认情况下,此参数设置为null)。如果是,我如何根据角色构造和发送returnUrl? 或者有更简单的方法来实现这一目标吗?

3 个答案:

答案 0 :(得分:1)

默认情况下,在返回ActionResult的控制器方法中,如果只返回“View()”,那么将显示的页面是Views目录中的页面,其中包含控制器方法的名称。但是,您可以指定将返回的View的名称,或者将调用传递给另一个控制器方法以返回相应的视图。

如以下设想的例子:

    public ActionResult Edit(string id)
    {
    // get the object we want to edit
        IObjectDefinition definedObject = _objectManager.GetObjectById(id);
        if (definedObject  != null)
        {
            ViewData.Add("definition", definedObject );// add to view data collection so can display on page

            IUser user = GetCurrentUser();// get from session/cookie/whatever
            if (!user.IsAccountAdmin)
    {   
                return View("Detail");// a readonly page as has no rights to edit
    }
    else
    {
        return View();// same object displayed in editable mode in another view
    }
        }
        else
        {
            return New();// call to controller method below to allow user to create new record
        }
    }


    public ActionResult New()
    {
        return View();
    } 

答案 1 :(得分:0)

您决定在操作中使用哪个视图(渲染) - 它不是由URL直接指定

在代码中,您可以访问用户对象,从中可以确定用户所处的角色 - 从中​​可以直接选择相应的视图。

答案 2 :(得分:0)

我认为您可以在成功登录时执行RedirectToAction,并且由于您现在拥有有效的登录用户,因此您可以在操作方法中使用LoggedIn用户的IsInRole属性并呈现适当的部分视图。