Axs Document
  • AXS Framework
  • 1. Common structures
    • 의존성 관계 설정 - Dependency Injection
    • 캐싱 - Caching
    • 로깅 - Logging
    • 세션 - Session
    • 다중 테넌트 - Multi Tenancy
    • 모듈 시스템 - Module System
    • 객체 매핑 - Object To Object Mapping
    • 메일 연동 - Mail System
  • 2. Domain Layer
    • 엔티티 - Entities
    • 저장소 - Repositories
    • 도메인 서비스 - Domain Services
    • 작업 단위 - Unit Of Work
  • 3. Application Layer
    • 애플리케이션 컨트롤러 - Application Controller
    • DTO - Data Transfer Objects
    • DTO 객체의 유효성 체크 - Validating Data Transfer Objects
    • 인증 - Authorization
    • 감사 로그 - Audit Logging
    • 엔티티 기록 - Entity History
  • 4. Object Relational Mapping
    • EntityFramework 통합
    • Dapper 통합
  • 5. Background Services
    • 백그라운드 작업과 워커
  • 6. Presentation Layer
    • 에러 핸들링
Powered by GitBook
On this page
  1. 3. Application Layer

인증 - Authorization

PreviousDTO 객체의 유효성 체크 - Validating Data Transfer ObjectsNext감사 로그 - Audit Logging

Last updated 1 year ago

Authorization

설명

권한 부여는 사용자가 응용 프로그램에서 특정 작업을 수행 할 수 있는지 확인하는 데 사용됩니다. Axs는 권한을 구현하기 위한 롤 기반 기능을 제공합니다.

IPermissionChecker

권한 부여 시스템은 IPermissionChecker를 사용하여 권한을 확인합니다.

권한 정의

public class MyAuthorizationProvider : AuthorizationProvider
{
    public override void SetPermissions(IPermissionDefinitionContext context)
    {
        // administration 권한 부여
        var administration = context.CreatePermission("관리자");

        // administration 하위 권한 부여
        var userManagement = administration.CreateChildPermission("관리자.사용자관리");
        userManagement.CreateChildPermission("관리자.사용자관리.추가");

        var roleManagement = administration.CreateChildPermission("관리자.역할관리");
    }
}

권한은 다음 속성으로 정의됩니다 :

  • Name: 시스템 전체에서 고유한 이름입니다. 권한 이름에 대한 const 문자열을 정의하는 것이 좋습니다.

  • Display name: 나중에 UI에서 권한을 표시하는 데 사용할 수 있는 다국어 가능한 문자열 키입니다.

  • Description: 나중에 UI에서 권한 정의를 표시하는 데 사용할 수 있는 다국어 가능한 문자열 키입니다.

  • MultiTenancySides: 다중 테넌트 애플리케이션의 경우 테넌트 또는 호스트가 권한을 사용할 수 있습니다.

권한은 상위 및 하위 권한을 가질 수 있습니다. 이는 권한 검사에 영향을주지 않지만 UI에서 권한을 그룹화하는 데 도움이됩니다.

권한 부여 공급자를 만든 후 모듈의 PreInitialize 메서드에 등록해야 합니다.

Configuration.Authorization.Providers.Add<MyAuthorizationProvider>();

권한 체크

AxsAuthorize 어트리뷰트를 사용한 권한 체크

AxsAuthorize 속성은 권한을 확인하는 가장 쉽고 일반적인 방법입니다.

[AxsAuthorize("관리자.사용자관리.추가")]
public void CreateUser(CreateUserDto input)
{
    // "관리자.사용자관리.추가" 권한이 허용된 사용자만 실행이 가능합니다.
}

"관리자.사용자관리.추가"권한이 부여되지 않은 사용자는 CreateUser 메서드를 호출 할 수 없습니다.

[AxsAuthorize]
public void SomeMethod(SomeMethodDto input)
{
    // 로그인된 사용자가 실행할 수 있습니다.
}

IPermissionChecker 사용

AxsAuthorize 속성은 대부분의 경우에 충분하지만 메서드 본문에서 권한을 확인해야하는 상황이 있습니다. 아래 예제와 같이 IPermissionChecker를 주입하고 사용할 수 있습니다.

public void CreateUser(CreateOrUpdateUserDto input)
{
    if (!PermissionChecker.IsGranted("관리자.사용자관리.추가"))
    {
        throw new AxsAuthorizationException("create user 권한이 없습니다.");
    }
}

IsGranted는 단순히 true 또는 false를 반환하므로 모든 논리를 코딩 할 수 있습니다. 위와 같이 단순히 권한을 확인하고 예외를 throw하면 Authorize 메서드를 사용할 수 있습니다 :

public void CreateUser(CreateOrUpdateUserDto input)
{
    PermissionChecker.Authorize("관리자.사용자관리.추가");
}

권한이 필요한 각 작업에 대해 고유 한 권한이 정의됩니다. Axs는 모듈 식으로 설계 되었으므로 모듈()마다 다른 권한을 가질 수 있습니다. 모듈은 권한을 정의하기 위해 AuthorizationProvider에서 파생 된 클래스를 만들어야 합니다.

권한 부여 공급자는 종속성 주입()에 자동으로 등록됩니다. 권한 부여 공급자는 다른 소스를 사용하여 권한 정의를 빌드하기 위해 모든 종속성 (예 : 저장소)을 삽입 할 수 있습니다.

AxsAuthorize 속성은 현재 사용자가 로그인 했는지도 확인합니다 (using ). 메서드에 대해 AxsAuthorize를 선언하면 로그인만 확인합니다.

modular
dependency injection
IAxsSession.UserId
Alt text