1

我已經看到了許多關於使用標記,角色提供者和membershipprovider保護MVC應用程序的示例,但沒有一個適合我的場景。這是我的設置..如何從自定義SQL「AdminUsers」表中保護管理員的MVC4區域

  • VS2012使用EntityFramework鏈接到SQL 2008 R2 4.3管理數據。
  • 項目在IIS中進行基本身份驗證,因此所有員工,擁有empID的教師和學生都可以在內部或外部進行身份驗證。其中一些人是管理員,所以他們在管理區進行管理。
  • 我在我的項目中創建了一個「Admin」區域,該區域當前沒有安全性,因此任何人都可以鍵入domain/admin並將其重定向到該區域。此區域包含管理員(CRUD),約會(CRUD),設置(U),工具和報告功能。 adminUser和約會部分有他們自己的表,並且CRUD按預期工作。

下面是我在問什麼.. 我如何驗證對「管理員」基本身份驗證當前用戶從我AdminUsers SQL表,然後只允許這些人進入我的管理區域?

感謝您的時間, 克里斯

回答

4

如果你不打算依靠會員或角色你總是可以編寫檢查對數據庫用戶AuthorizeAttribute的自定義實現。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class AdminOnlyAttribute : AuthorizeAttribute 
{ 
    public AdminOnlyAttribute() 
    { 
    } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!User not in Admin table) 
     { 
      throw new UnauthorizedAccessException(); 
     } 
     base.OnAuthorization(filterContext); 
    } 
} 

或類似的東西。當然,那麼:

[AdminOnly] 
public class AdminController : Controller 
{ 
    // ... 
} 
+0

謝謝布拉德..還有幾個問題。這是一個構造函數嗎? public AdminOnlyAttribute(){}?我究竟如何使用這種方法?我的控制器如何知道[AdminOnly]?我想重定向用戶到另一個動作,如應用程序的主頁,並在頁面頂部給他們一個像「未經授權」的視圖袋......感謝您的幫助 – foxtrotZulu

+0

@foxtrotZulu:您可以指定'filterContext.Result = new ViewResult { ViewName =「未經授權」};'你需要修飾應用'[AdminOnly]'的控制器。如果你想給屬性添加額外的參數,我離開了CTor。 –

+0

在我的管理區域內幫助我從_unauthorized視圖重定向的一件小事。我不能重定向回到根目錄索引,它總是默認爲域/管理/家庭/索引,而我想要去域/ home /索引。所以動作鏈接如下...

@Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)
...確保您將「區域」設置爲空,以便您可以放大到根索引。 – foxtrotZulu