728x90
반응형
로그인을 해야지만 접속이 가능한 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
{
}
728x90
반응형
'ASP.NET MVC' 카테고리의 다른 글
Visual Studio 2019] 디버깅 팁, Debugger Tips (0) | 2021.12.23 |
---|---|
ASP.NET] DapperManager.cs (0) | 2021.12.22 |
ASP.NET] 게시판 Paging 페이징 만들기 (0) | 2021.12.21 |
ASP.NET] Select 태그 만드는 다양한 방법 (DropDownList, DropDownListFor, EnumDropDownListFor) (0) | 2021.12.08 |
ASP.NET] 경로 노출없이, idx로 파일정보 조회하여 ZIP 다운로드 처리 (0) | 2021.12.06 |
댓글