ASP.NET Core中的授權是由 AuthorizeAttribute
和其各種參數所控制。在最基本的形式中,將 [Authorize]
屬性套用至控制器
、動作
或 Razor Page
,會限制對該元件的存取權給已驗證的使用者。
以下範例在 Controller 上加入 [Authorize]
屬性,在這個 Controller 裡的所有 Action 都需經過授權才可以使用。
[Authorize]
public class AccountController : Controller
{
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
如果整個 Controller 只有少數 Action 需經過授權驗證,可以直接將 [Authorize]
屬性加在Action上。
*只剩下 Logout
Action需經過授權才能存取,其他的 Action 任何人皆可存取。
public class AccountController : Controller
{
public ActionResult Login()
{
}
[Authorize]
public ActionResult Logout()
{
}
}
如果有Action不須經過授權(例如登入頁面)可以另外加上 [AllowAnonymous]
,使個別Action允許未經驗證存取。
[Authorize]
public class AccountController : Controller
{
[AllowAnonymous]
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
若想針對角色來進行授權,可以在 Authorize
屬性後加上角色名稱,例如 AdministrationController
只允許管理者(Administrator)存取,如下
[Authorize(Roles = "Administrator")]
public class AdministrationController : Controller
{
public IActionResult Index() =>
Content("Administrator");
}
多個角色可以用逗號分隔,例如 SalaryController
只有 Finance
和 HRManager
角色才能存取。
[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
public IActionResult Payslip() =>
Content("HRManager || Finance");
}
以上角色授權一樣可以針對 Action 去指定
[Authorize(Roles = "Administrator, PowerUser")]
public class ControlAllPanelController : Controller
{
public IActionResult SetTime() =>
Content("Administrator || PowerUser");
[Authorize(Roles = "Administrator")]
public IActionResult ShutDown() =>
Content("Administrator only");
}
在上面的 ControlAllPanelController
中 Administrator
和 PowerUser
角色可以存取 SetTime
Action,但只有 Administrator
可以存取 ShutDown
Action。