2012-03-09 164 views
0

我對MVC相當陌生,甚至還沒有真正掌握[Authorize]。基本上,我有一個網站,對於某個區域,要求他們在訪問前給他們的電子郵件地址,姓名和公司。沒有密碼,沒有註冊等。然後會有一個Admin區域,用戶需要使用他們的電子郵件地址和密碼登錄。多個授權請求

我的問題是,我將如何實施雙重授權的情況?

也忘記提及,在Admin區域,他們可以將素材上傳到他們管理的網站,即比他們目前所在的網站更多。我有一個數據庫,用於保存他們管理的網站。該URL會像/ Admin/Site /,但一旦他們登錄到管理員,我如何確保他們不能去/ Admin/Site2,其中Site2是他們不是管理員。

+0

您需要使用角色。 [http://stackoverflow.com/questions/6404254/mvc-3-dynamic-authorization-of-multiple-roles-and-users][1] [1]:HTTP://計算器。 com/questions/6404254/mvc-3-dynamic-authorization-of-multiple-roles-and-users – 2012-03-09 10:23:24

回答

1

我假設這個人可以是匿名的,只要她/他提供了詳細信息之前下載該文件。在這種情況下,請忽略授權屬性並編寫您自己的。這是一個簡單的例子。它依靠一個cookie來設置。

public class CheckEmailAddressAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var request = filterContext.HttpContext.Request; 
     // if the cookie isn't set the a user never provided their details 
     if (request.Cookies["mycookiename"] == null) 
     { 
      // Set it to the correct result, to redirect the user to provide their email address 
      filterContext.Result = new ViewResult { ViewName = "GetEmailAddress" }; 
      filterContext.HttpContext.Response.AppendCookie(new HttpCookie("mycookiename", "true")); 
     } 
     else 
     { 
      // Don't do anything, the user already provided their email address 
     } 

    } 
} 

並在下載的控制器上指定它。

public class DownloadController : Controller 
{ 
    [CheckEmailAddress] 
    public ActionResult Download(string name) 
    { 
     // Implement download 
    }  
} 

剩下的唯一事情就是在設置電子郵件地址時設置cookie。我假設你知道如何做到這一點。您可能還需要確保您有一些「returnUrl」參數,以便您可以在用戶提供其電子郵件地址後將用戶重定向到下載頁面。

編輯

按OP,我們不想設置Cookie,除非該人進入他們的詳細資料,所以這裏是更新後的類。

public class CheckEmailAddressAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var request = filterContext.HttpContext.Request; 
     // if the cookie isn't set the a user never provided their details 
     if (request.Cookies["mycookiename"] == null) 
     { 
      // Set it to the correct result, to redirect the user to provide their email address 
      filterContext.Result = new ViewResult { ViewName = "GetEmailAddress" }; 
      // filterContext.HttpContext.Response.AppendCookie(new HttpCookie("mycookiename", "true")); 
     } 
     else 
     { 
      // Don't do anything, the user already provided their email address 
     } 

    } 
} 
+0

因此,舉例來說,除了要求提供詳細信息的頁面外,我還會在新聞區域內的所有內容上使用[CheckEmailAddress] – ediblecode 2012-03-09 10:50:40

+0

此外,在這個例子中,他們所要做的就是進入頁面並設置cookie。他們可以重定向到頁面,然後簡單地向後導航,然後他們擁有cookie。 – ediblecode 2012-03-09 11:03:30

+0

查看我的更新。不應該在屬性中設置Cookie。 – bloudraak 2012-03-09 11:14:38