[C#][ASP.NET MVC]自訂AuthorizeAttribute
經過上一篇實作後,原來自訂Action Filter一點都不複雜(當初想太多了...XD),
只要繼承和了解每個介面功能就可以依需求擴充和自訂,
而網站權限驗證功能我想應該是很普遍的需求,所以我們大概都會自訂AuthorizeAttribute相關判斷邏輯,
這裡紀錄一下。
假設資料表結構和資料如下:
再看過Authorize Attribute.cs後,就可以來覆寫AuthorizeCore相關邏輯。
繼承AuthorizeAttribute
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore( HttpContextBase httpContext )
{
if( httpContext == null )
throw new ArgumentNullException( "httpContext" );
String[] users = Users.Split( ',' );//取得輸入user清單
String[] roles = Roles.Split( ',' );//取得輸入role清單
if( !httpContext.User.Identity.IsAuthenticated )//判斷是否已驗證
return false;
if( roles.Length != 0 )
{
ASSETEntities db = new ASSETEntities();
String account = httpContext.User.Identity.Name.ToString(); //登入的使用者帳號
bool Isright = false;//角色是否正確
var q = from tbl in db.USERPROFILE
where tbl.ACCOUNT == account
select new
{
tbl.ROLE
};
foreach( String inputval in roles )//循環比對角色資料
{
if( q.First().ROLE.ToString() == inputval )
return true;
else
Isright = false;
}
return Isright;
}
return true;
}
Controller
[MyAuthorizeAttribute( Roles = "DEV,HR" )]
public ActionResult About()
{
return View();
}
這樣就完成了簡單的網站安全驗證,只要登入的使用者角色不屬於DEV或HR,一律都會被導回預設登入頁面。
參考