로그인을 해야지만 접속이 가능한 Controller에 상속한 BaseController를 만든다.
1. BaseController.cs
public class BaseController : Controller
{
public string actionName { get; protected set; }
public string controllerName { get; protected set; }
protected override void OnActionExecuting(ActionExecutingContext filter)
{
//로그인 체크
LogonCheck(filter);
//DoNotAuthorizeAttribute가 설정되어 있으면 접속권한 체크하지 않는다.
if (filter.ActionDescriptor.GetCustomAttributes(true).Any(x => x is DoNotAuthorizeAttribute))
{
return;
}
//Ajax 호출은 접속권한 체크하지 않는다.
if (filter.HttpContext.Request.IsAjaxRequest())
{
return;
}
//메뉴 권한체크 추가
CheckAccessAuth(filter);
}
private void LogonCheck(ActionExecutingContext filter)
{
if (!isLogin) //session or cookie로 로그인 여부 확인
{
var routeDictionary = new RouteValueDictionary { { "action", "Logout" }, { "controller", "Account" } };
//강제 로그아웃 시킨다.
filter.Result = new RedirectToRouteResult(routeDictionary);
return;
}
}
private void CheckAccessAuth(ActionExecutingContext filter)
{
//컨트롤러, 액션
actionName = filter.ActionDescriptor.ActionName;
controllerName = filter.ActionDescriptor.ControllerDescriptor.ControllerName;
//로그인 계정정보, controller, action 정보로 접속권한 db 체크
if (!CanAccessMenu(loginInfo, controllerName, actionName)) {
//권한없을 경우는 로그인 말고 다른페이지로 이동
var routeDictionary = new RouteValueDictionary() { { "action", "NotAuthorized" }, { "controller", "Account" } };
filter.Result = new RedirectToRouteResult(routeDictionary);
return;
}
}
}
2. 권한체크 필요한 Controller에서 BaseController 상속받는다.
public class NoticeController : BaseController
{
}
출처 : https://bigexecution.tistory.com/78
댓글 없음:
댓글 쓰기