/// <summary> /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 Criteria를 빌드합니다. /// </summary> /// <param name="resource">리소스 종류</param> /// <param name="resourceInstanceId">대상 리소스 ID</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 종류</param> /// <param name="authorityKind">권한 종류</param> /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 Criteria</returns> public DetachedCriteria BuildCriteriaOfResourceActor(Resource resource, string resourceInstanceId, string companyCode, string actorCode, ActorKinds? actorKind, AuthorityKinds? authorityKind) { return BuildQueryOverOfResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind).DetachedCriteria; }
/// <summary> /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 QueryOver 를 빌드합니다. /// </summary> /// <param name="resource">리소스 종류</param> /// <param name="resourceInstanceId">대상 리소스 ID</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 종류</param> /// <param name="authorityKind">권한 종류</param> /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 QueryOver</returns> public QueryOver<ResourceActor, ResourceActor> BuildQueryOverOfResourceActor(Resource resource, string resourceInstanceId, string companyCode = null, string actorCode = null, ActorKinds? actorKind = null, AuthorityKinds? authorityKind = null) { if(resource == null) return BuildQueryOverOfResourceActor(null, null, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); if(resource.ProductCode == null) return BuildQueryOverOfResourceActor(null, resource.Code, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); return BuildQueryOverOfResourceActor(resource.ProductCode, resource.Code, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); }
/// <summary> /// 새로운 리소스에 대한 접근 권한 정보를 추가합니다. (NOTE: StatelessSession을 사용하여 추가하므로 성능이 빠릅니다.) /// </summary> /// <param name="resource">접근 대상 리소스 종류</param> /// <param name="resourceInstanceId">접근 대상 리소스 Id</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param> /// <param name="authorityKind">접근 권한 종류</param> /// <returns>새로 생성한 리소스 접근 권한 정보</returns> public void InsertResourceActor(Resource resource, string resourceInstanceId, string companyCode, string actorCode, ActorKinds actorKind, AuthorityKinds authorityKind) { resource.ShouldNotBeNull("resource"); resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId"); companyCode.ShouldNotBeWhiteSpace("companyCode"); if(IsDebugEnabled) log.Debug(@"새로운 리소스 접근 권한 정보를 IStatelessSession을 사용하여 추가합니다... " + @"resource={0}, resourceInstanceId={1}, companyCode={2}, actorCode={3}, actorKind={4}, authorityKind={5}", resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); var resourceActor = new ResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); //Guard.Assert(SessionFactory.IsSQLite() == false, "StatelessSession는 SQLite 메모리 DB는 지원하지 않습니다."); resourceActor.InsertStateless(); }
/// <summary> /// 새로운 리소스에 대한 접근 권한 정보를 생성합니다. /// </summary> /// <param name="resource">접근 대상 리소스 종류</param> /// <param name="resourceInstanceId">접근 대상 리소스 Id</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param> /// <param name="authorityKind">접근 권한 종류</param> /// <returns>새로 생성한 리소스 접근 권한 정보</returns> public ResourceActor CreateResourceActor(Resource resource, string resourceInstanceId, string companyCode, string actorCode, ActorKinds actorKind, AuthorityKinds authorityKind) { resource.ShouldNotBeNull("resource"); resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId"); companyCode.ShouldNotBeWhiteSpace("companyCode"); if(IsDebugEnabled) log.Debug(@"새로운 리소스 접근 권한 정보를 생성합니다... " + @"resource={0}, resourceInstanceId={1}, companyCode={2}, actorCode={3}, actorKind={4}, authorityKind={5}", resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); var resourceActor = new ResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); return Repository<ResourceActor>.SaveOrUpdate(resourceActor); }
/// <summary> /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 QueryOver 를 빌드합니다. /// </summary> /// <param name="productCode">제품 코드</param> /// <param name="resourceCode">리소스 종류 코드</param> /// <param name="resourceInstanceId">대상 리소스 ID</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 종류</param> /// <param name="authorityKind">권한 종류</param> /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 QueryOver</returns> public QueryOver<ResourceActor, ResourceActor> BuildQueryOverOfResourceActor(string productCode, string resourceCode, string resourceInstanceId, string companyCode, string actorCode, ActorKinds? actorKind, AuthorityKinds? authorityKind) { if(IsDebugEnabled) log.Debug(@"권한관련 정보를 가진 ResourceActor 정보를 조회하기 위한 QueryOver를 빌드합니다..." + Environment.NewLine + @"productCode={0}, resourceCode={1}, resourceInstanceId={2}, companyCode={3}, actorCode={4}, actorKind={5}, authorityKind={6}", productCode, resourceCode, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); var query = QueryOver.Of<ResourceActor>(); if(productCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ProductCode == productCode); if(resourceCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ResourceCode == resourceCode); if(resourceInstanceId.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ResourceInstanceId == resourceInstanceId); if(companyCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.CompanyCode == companyCode); if(actorCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ActorCode == actorCode); if(actorKind.HasValue) query.AddWhere(ra => ra.Id.ActorKind == actorKind.Value); if(authorityKind.HasValue) query.AddWhere(ra => ra.AuthorityKind == authorityKind.Value); return query; }