簡體   English   中英

帶有 ASP.NET 標識的自定義授權屬性

[英]Custom Authorization attribute with ASP.NET Identity

在我的 MVC5 項目中,管理員可以在控制面板中創建課程並將課程存儲在數據庫中(目前只有 2 個課程)。 另一方面,我可以為這些課程創建一些角色,即 CanCreateMathHomework、CanCreateChemistryHomework,以便只有相關課程的教師才能使用 ASP.NET Identity 發布相關課程的作業。 到目前為止,一切正常,教師可以發布他們課程的作業。

課程控制器:

[Authorize(Roles = "CanCreateMathHomework")]
public ActionResult CreateMathHw()
{
    //code omitted for brevity
}


[Authorize(Roles = "CanCreateChemistryHomework")]
public ActionResult CreateChemistryHw()
{
    //code omitted for brevity
}

但是,我想創建一個靈活的權限機制,讓新創建的課程的老師可以發布他們的作業,而無需在數據庫中創建新角色或在控制器中創建新操作。 我想要執行的是:

1) 管理員將繼續創建新課程和課程老師,然后像以前一樣將它們保存在數據庫中。

2) 管理員授予新創建課程的老師的權限,以便他或她可以像其他老師一樣發布他或她的課程的硬件。

3) 不需要在控制器中創建新的 Action 方法,一切都應該在不需要軟件開發人員的情況下完成。

但是如何? 是否可以? 如果是這樣,是否可以使用全局角色和 Action 方法來執行此操作? 我真的很困惑,任何幫助將不勝感激。 謝謝。

不幸的是,授權不能按照您描述的方式工作。

然而,aspnet 身份數據庫(假設您有一個)將處理為用戶、角色和其他此類有趣的身份驗證信息創建表,因此您需要做的就是在這些 aspnet 表和您的“xhomework”表之間創建連接以鏈接角色/用戶訪問其他表中的項目。

然后,您可以通過從現有的 Authorize 屬性或其父級派生來創建新屬性(有關更多詳細信息,請參見此處: https : //msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v =vs.118).aspx )

...

這將為您提供一個“過濾器”,該過濾器在執行操作之前應用於請求,允許您通過覆蓋 OnAuthorization(參見此處: https ://msdn.microsoft.com/en-us/)根據自己的安全條款拒絕library/system.web.mvc.authorizeattribute.onauthorization(v=vs.118).aspx#M:System.Web.Mvc.AuthorizeAttribute.OnAuthorization(System.Web.Mvc.AuthorizationContext) )

...從那里你只需要一個 UI 來管理新的連接表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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