簡體   English   中英

Simplemembership篩選器用戶對不應用角色的頁面的訪問權限(ASP.NET MVC 4)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM