2023년 12월 18일 월요일

c# - BaseController (Authorization)

 

로그인을 해야지만 접속이 가능한 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


댓글 없음:

댓글 쓰기

javascript - SQL 예약어 제거

  <script language="javascript"> //특수문자, 특정문자열(sql예약어) 제거 function checkSearchedWord(obj){ obj.value = obj.value+&quo...