2.0 권한체크
- Tqoon 2.0에서 로그인/ 비로그인와 관리자 (Admin,PAadmin)의 접근 가능한 페이지 세팅 방법을 설명합니다.
로그인 여부
- CurrentUser.IsLogin으로 로그인 여부를 확인 가능합니다.
- [Authorize] 속성으로 로그인/비로그인 페이지 설정이 가능합니다.
관리자(Admin,Padmin)
- 관리자 계정의 경우에는 Admin 관리자 계정과 PAdmin 관리자 계정으로 분류합니다.
- Admin의 경우 Admin2 관리자 페이지에서 사용하는 Master 관리자 계정을 의미합니다.
- PAdmin의 경우 Partner 관리자 페이지에서 관리자 권한을 부여한 계정을 의미합니다.
- tbluser 테이블의 strusertype 컬럼으로 확인 가능하며 admin의 경우 ADMIN, PAdmin의 경우 PAdmin으로 등록 되어있습니다.
회원 분류(MemberUser,NonmemberUser,SnsUser)
- 회원은 회원가입 유무에 따라 일반 회원 빛 비회원, 가입 경로에 따라 SNS유저로 분류할 수 있습니다.
- tblUser 테이블의 loginDealerId로 분류 합니다.
TqoonAuthenticationOptions에서 확인
-
public static class TqoonAuthenticationOptions { public const int DealerId_Google = 489; public const int DealerId_Facebook = 487; public const int DealerId_Twitter = 488; public const int DealerId_Yahoo = 495; public const int DealerId_Naver = 1; public const int DealerId_Kakao = 2; public const int DealerId_Nonmember = 486; }
관리자 계정 부여 및 회원 분류
-
TqAuthenticationRoleType.cs V2 User 계정 종류 확인
-
Tqoon2.0에는 관리자계정(MasterAdmin,PartnerAdmin)과 비회원,SNS계정이 있습니다.
-
namespace TqoonV2.Models.Role { public class TqAuthenticationRoleType { public const string MasterAdmin = "MasterAdmin"; public const string PartnerAdmin = "PartnerAdmin"; public const string MemberUser = "MemberUser"; public const string NonmemberUser = "NonmemberUser"; public const string SnsUser = "SnsUser"; } }
-
-
TqoonUserIdentity.cs에서 user의 role 세팅
-
userType을 체크하여 관리자 계정(MasterAdmin,PartnerAdmin)을 판단하고, 회원 계정을 분류합니다.
-
public class TqoonUserIdentity : ClaimsIdentity { public TqoonUserIdentity(UserItem userItem) : base(DefaultAuthenticationTypes.ApplicationCookie) { //생략 if ("ADMIN".Equals(userItem.UserType)) claims.Add(new Claim(ClaimTypes.Role, TqAuthenticationRoleType.MasterAdmin)); //admin 관리자 계정 if ("PADMIN".Equals(userItem.UserType)) claims.Add(new Claim(ClaimTypes.Role, TqAuthenticationRoleType.PartnerAdmin)); //partner 관리자계정 if (userItem.IsSNSUser()) claims.Add(new Claim(ClaimTypes.Role, TqAuthenticationRoleType.SnsUser)); //sns 계정 claims.Add(new Claim(ClaimTypes.Role, GetMemberRole(userItem))); //비회원 계정 //생략 } private string GetMemberRole(UserItem userItem) { if (userItem.LoginDealerId != TqoonAuthenticationOptions.DealerId_Nonmember) return TqAuthenticationRoleType.MemberUser; if (!userItem.UserId.StartsWith("*")) return TqAuthenticationRoleType.MemberUser; return TqAuthenticationRoleType.NonmemberUser; } }
-
-
CurrentUser
-
판단한 관리자 계정 및 회원 계정을 CurrnetUser에 추가합니다.
-
public class CurrentUser { public static bool IsManager { get { var managerRole = new List<string>(); managerRole.Add(TqAuthenticationRoleType.MasterAdmin); managerRole.Add(TqAuthenticationRoleType.PartnerAdmin); return AnyInRole(managerRole); } } public static bool IsMasterAdmin { get { var masterAdminRole = new List<string>(); masterAdminRole.Add(TqAuthenticationRoleType.MasterAdmin); return AnyInRole(masterAdminRole); } } public static bool IsNonmember { get { if (IsAuthenticated()) { return AuthenticationManager.User.HasClaim(ClaimTypes.Role, TqAuthenticationRoleType.NonmemberUser); } else { return false; } } } public static bool IsSnsUser { get { return !"Account".Equals(AccountType); } } }
-
접근 가능한 페이지 세팅 방법
-
Controller 권한 확인 및 세팅 방법
-
위의 CureentUser에서 세팅한 계정으로 권한 확인 및 접근 가능 페이지를 세팅할 수 있습니다.
-
public class rolecheck { public ActionResult rolecheck1() { if(CurrentUser.IsMasterAdmin) //admin 마스터 관리자일 경우만 if(CurrentUser.IsManager) //관리자 계정일 경우 (admin, Partner 관리자) if(CurrentUser.IsNonmember) //비회원일때 if(CurrentUser.IsSnsUser) //SNS 계정일 때 //생략 } //Authorize 속성에서 Roles부여 설정하여 페이지별 권한 설정 가능 합니다. //TqAuthenticationRoleType.cs에 정의 되어진 속성으로 Roles부여 가능합니다 [Authorize(Roles = TqAuthenticationRoleType.MasterAdmin)] public ActionResult rolecheck2() { //생략 } }
-
-
View 권한 확인 –ngConstants.cshtml
-
ngConstants.cshtml에 유저 정보가 $CurrentUser 상수로 정의 되어있습니다.
-
app.constant("$CurrentUser", { IsSigned: @(CurrentUser.IsLogin ? "true" : "false"), IsManager : @(CurrentUser.IsManager ? "true" : "false"), IsNonmember: @(CurrentUser.IsNonmember ? "true" : "false"), IsSnsUser: @(CurrentUser.IsSnsUser ? "true" : "false"), UserId: "@(CurrentUser.UserId)", UserName: "@(CurrentUser.UserName)", UserSiteNickName: "@(CurrentUser.UserSiteNickName)", UserEmail: "@(CurrentUser.Email)", UnConvertUserId: "@(UserPath.GetUnConvertId(CurrentUser.UserId))", Roles:"@(CurrentUser.Role)", IsMobileDevice: @(CurrentUser.IsMobileDevice ? "true" : "false"), IsInRole: function(hasRoles) { var rolesArray = _.map("@(CurrentUser.Role)".split(','), function(d){return d.trim();}); var hasRolesArray = _.map(hasRoles.split(','), function(d){return d.trim();}); for (var i = 0; i < rolesArray.length; i++) { if(_.contains(hasRolesArray, rolesArray[i])) return true; } return false; }, UserLocale : "@(CurrentUser.Locale)" });
-
//$CurrentUser.isInRole을 사용하여 권한을 확인할 수 있습니다. //ngConstants.cshtml에 정의된 $CurrentUser상수 값을 활용하여 User의 계정을 분류할 수 있습니다. angular.module("Page.TqCafeBoardArticleModify", []) .controller("Page.TqCafeBoardArticleModify.PluginCtrl", ["$scope","$CurrentUser", function ($scope, $CurrentUser) { $scope.canDelete = function (userId) { if($CureentUser.IsNonmember) return false; //비회원 판단 if($CureentUser.IsSnsUser) return false; //SNS 판단 return $CurrentUser.UserId === userId || $CurrentUser.IsInRole("MasterAdmin, PartnerAdmin"); } tqAddModule("Page.TqCafeBoardArticleModify");
-