2017-04-18 83 views
0

我在製作一個小型的SAAS應用程序。我爲所有用戶使用相同的數據庫,只使用用戶名和ID區分數據。這意味着用戶可以在瀏覽器中輸入新的URL並查看其他用戶的數據。這當然不是一個理想的方法。我想做一個檢查,看看當前用戶是否可以實際訪問資源:例如。我如何在我的ASP.NET MVC應用程序中進行自定義授權

http://myapplication.com/images/15 

而且如果用戶更改URL來

http://myapplication.com/images/16 

我應該做我的數據庫檢查,以查看當前用戶實際訪問看到的用戶ID 16.如果圖像不會重定向到「未經授權」頁面。

我該如何實施?

+0

看看這篇文章:https://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way – TrevorBrooks

回答

0

的第一步是確保你永遠不會有任何ID的用戶本身網址。例如,從來沒有http://example.com/?user=10。您應始終從身份驗證中獲取用戶標識,而不是從網址(或發佈的值)中獲取用戶標識。

第二步,在您的查詢中使用該ID。所以,舉個例子,假設他們尋求http://example.com/images/100,那麼在你的數據庫中,你應該有一個將資產的所有權與用戶相關聯的機制,或者是用戶標識符或者ID到資產的映射表等等。這樣,如果用戶不允許訪問,它只會返回一個空的結果集。數據不可能被返回,空的結果集應該告訴頁面該項不存在(不一定是授權失敗,只是該對象不存在)。第三,任何內在關於用戶的頁面(例如用戶簡檔,帳戶頁面或儀表板)都不應該在URL中具有任何ID,它應該自動進入經過驗證的用戶頁面。最後,如果您需要阻止用戶訪問整個頁面或一組頁面,那麼您應該在OnAuthorization事件或類似的(自定義屬性,基類等等)中執行此操作,在屬性授權和使用基於角色的授權。永遠不要在PageLoad或類似事件中進行授權(例如控制器操作),因爲到達該步驟時,管道中已經發生了大量工作。在頁面甚至開始安裝之前,最好阻止訪問。授權事件發生在管道的最初階段。

+0

乾杯,與用戶建立聯接表格,並以易於實施的方式解決了問題。我將研究進一步開發的自定義屬性,但目前這工作正常。 –

0

作出這樣的檢查帳戶及返回錯誤頁面或文件

public FileResult Image(string imageName) 
{ 
    string UserId = MethodWhereYouGetCurrentUserID(); 
    if(imageName == null) return View("~/Views/Shared/Error.cshtml", (object)"Null image"); 
    string imageShortName = imageName.Split(".")[0]; 
    if(!UserId == imageShortName) return View(~/Views/Shared/Error.cshtml, (object)"You can't access to this"); 
    string path = Server.MapPath("~/Contant/images/"+imageName); 
    return File(path, "image/jpg"); 
} 

RouteConfig不起訴的

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute 
    (
    name: "ImageRoute", 
    url: "/images/imageName", 
    default: new {controller = "Home", action = "GetImage"} 
); 
} 
相關問題