[英]Simplemembership Filter User Access to pages where roles don't apply (ASP.NET MVC 4)
我是授權和認證的新手,但是我最近開始在我的大學項目中使用簡單會員資格。 我設法使其運行。 我的問題是,我不確定如何解決某個問題。
有一個項目區域,在Controllers內部,這導致了一些不同的頁面。 所有用戶都可以訪問“項目區域”及其中的頁面,但是他們只能訪問和更改與其所屬的“項目”相關的頁面/內容。 這不是角色問題。
我希望知道一種簡單的方法來創建過濾器,以根據其依賴關系來限制訪問權限,因此用戶將不會僅在url中鍵入“ id”並查看屬於另一組的內容。 最好不必自定義提供程序,因為這不是我的應用重點。
我正在將MVC 4與C#和EF 5一起使用。
您有兩種選擇:
首先,您可能會忘記編寫自定義授權屬性,而僅在操作方法內進行檢查。 但是,編寫自定義授權屬性並不難,並且應該適合您的方案。 例如,我寫的是基於特定權限而不是角色的。
這樣的事情應該為您工作:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CustomAuthorize : AuthorizeAttribute
{
private int project_id;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (base.AuthorizeCore(httpContext)) {
if (YourCurrentUserObject.IsPartofProject(project_id)) {
return true;
}
}
return false;
}
protected override void OnAuthorization(AuthorizationContext filterContext)
{
//get the "project id" parameter from your action method
project_id = Convert.ToInt32(filterContext.RouteData.Values.SingleOrDefault(x => x.Key == "project_id").Value);
base.OnAuthorization(filterContext);
}
}
一種解決方案是擁有一個映射用戶和項目之間關系的表。 您很可能已經有了這樣一個表。 我不熟悉您的應用程序域,但是我假設我們正在談論一種多對多關系,在這種關系中,一個用戶可以有多個項目,而一個項目可以有許多用戶。 如果您為SimpleMembership使用的用戶使用相同的ID,這將非常簡單。 在針對基於URL中傳遞的項目ID返回項目信息的控制器的操作中,首先通過調用WebSecurity.IsAuthenticated檢查用戶是否已通過身份驗證。 如果未通過身份驗證,請重定向到登錄頁面。 然后在查詢中返回項目信息,然后加入到將用戶映射到項目的表中,並確保當前用戶是所請求項目的一部分。 您可以通過調用WebSecurity.CurrentUserId獲得當前用戶ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.