ASP.NET MVC应用程序 - 用户授权/权限

时间:2013-10-01 07:11:17

标签: c# asp.net-mvc asp.net-mvc-3 security web-applications

我有一个ASP.NET MVC Web应用程序。

我的应用程序中有一个欢迎页面,我希望用户在允许他使用该应用程序之前完成该页面上的一些步骤。

我正在努力完成两件事:

  1. 确保用户始终重定向到该页面,直到他完成所需的步骤。注意:用户在欢迎页面时已登录。

  2. 忽略该用户向任何控制器发出的所有请求,但对特定控制器的一些特定请求除外。

  3. 执行上述操作的正确方法是什么?

    感谢。

4 个答案:

答案 0 :(得分:1)

我所做的是:

  1. 创建一个派生自Controller的类,如果没有登录,则添加逻辑以重定向:

    public class CustomController : Controller
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
    
            if (!LoggedIn) //Here you decide how to check if the user is Logged in
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
                {
                    controller = "YourLogInControllerName",
                    action = "YourLoginActionName"
                }));
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }
        }
    }
    
  2. 然后所有控制器派生自此CustomController类。

答案 1 :(得分:0)

如果您必须确保访问者完成这些“必需的步骤”,那么您可以使用该会话或其他(更持久的)存储,这样您就可以在他们完成这些存储后存储它。

答案 2 :(得分:0)

我创建了一个custom authorise attribute,如果它们不符合我设置的条件,则会将其用户重定向到我的登录页面。这允许我在我的基本控制器上使用[AuthorizeAdminArea],它停止了对所有区域的访问。然后我使用[AllowAnonymous]来允许访问登录区域。

查看SimpleMemshipProvider

答案 3 :(得分:0)

使用Role并且只有在用户拥有此Role时才允许访问其他控制器。完成必要步骤后,将用户添加到此Role

请参阅http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx