0Pricing
C# Academy · 강의

사용자 지정 권한 부여 요구 사항

사용자 지정 요구 사항과 처리기를 만듭니다.

사용자 지정 권한 부여 요구 사항은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

기본 제공 기능만으로 부족할 때

일부 규칙은 RequireRole 또는 RequireClaim으로 표현할 수 없습니다. 예를 들어 "최소 18세여야 함" 또는 "이 리소스의 소유자여야 함"과 같은 규칙입니다.

이 경우 사용자 지정 요구 사항과 처리기를 작성해야 합니다.

// Rule: user must be older than a configurable minimum age

IAuthorizationRequirement

요구 사항은 규칙의 데이터를 담는 표식입니다. 비어 있는 IAuthorizationRequirement 인터페이스를 구현합니다.

public class MinimumAgeRequirement : IAuthorizationRequirement
{
    public int MinimumAge { get; }
    public MinimumAgeRequirement(int minimumAge) =>
        MinimumAge = minimumAge;
}

AuthorizationHandler

처리기에는 논리가 들어 있습니다. AuthorizationHandler<TRequirement>에서 파생하고 HandleRequirementAsync를 재정의하십시오.

public class MinimumAgeHandler
    : AuthorizationHandler<MinimumAgeRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        MinimumAgeRequirement requirement)
    {
        // logic goes here
        return Task.CompletedTask;
    }
}

요구 사항 성공시키기

처리기 내부에서 사용자의 클레임을 검사하십시오. 규칙을 충족하면 context.Succeed(requirement)를 호출하십시오. 충족하지 않으면 이를 호출하지 않고 그대로 반환하면 됩니다.

var dobClaim = context.User.FindFirst("birthdate");
if (dobClaim is null) return Task.CompletedTask;

var dob = DateTime.Parse(dobClaim.Value);
int age = DateTime.UtcNow.Year - dob.Year;
if (dob > DateTime.UtcNow.AddYears(-age)) age--;

if (age >= requirement.MinimumAge)
    context.Succeed(requirement);

return Task.CompletedTask;

Succeed를 사용하고 Fail은 사용하지 않기

충족되었을 때 Succeed를 호출하고, 그렇지 않을 때는 아무 작업도 하지 않는 방식을 우선 사용하십시오. 같은 요구 사항을 처리하는 다른 처리기와 관계없이 반드시 실패시켜야 할 때만 context.Fail()을 호출하십시오.

// Soft: let other handlers also try
if (ok) context.Succeed(requirement);

// Hard: force failure no matter what
if (blocked) context.Fail();

처리기 등록하기

처리기를 IAuthorizationHandler로 DI에 등록하십시오. 범위가 지정된 서비스에 의존하지 않는 한 일반적으로 싱글톤으로 등록합니다.

builder.Services.AddSingleton<
    IAuthorizationHandler, MinimumAgeHandler>();

정책에 연결하기

AddRequirements (또는 Requirements.Add)를 사용하여 이름이 지정된 정책에 요구 사항을 추가하십시오. 처리기는 형식에 따라 자동으로 연결됩니다.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AtLeast18", policy =>
        policy.AddRequirements(new MinimumAgeRequirement(18)));
});

정책 사용하기

다른 이름이 지정된 정책과 같은 방식으로 적용하십시오.

[Authorize(Policy = "AtLeast18")]
[HttpGet("age-restricted")]
public IActionResult Restricted() => Ok();

리소스 기반 권한 부여

특정 인스턴스를 대상으로 권한을 부여하려면(예: "문서 소유자만 편집할 수 있음") 리소스 오버로드를 사용하십시오. 리소스는 처리기 컨텍스트에 전달됩니다.

public class OwnerHandler
    : AuthorizationHandler<OwnerRequirement, Document>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        OwnerRequirement requirement,
        Document resource)
    {
        var userId = context.User.FindFirstValue(
            ClaimTypes.NameIdentifier);
        if (resource.OwnerId.ToString() == userId)
            context.Succeed(requirement);
        return Task.CompletedTask;
    }
}

IAuthorizationService 호출하기

리소스 기반 확인은 주입된 IAuthorizationService를 통해 작업 내부에서 명령형으로 실행됩니다.

public async Task<IActionResult> Edit(int id)
{
    var doc = await _db.Documents.FindAsync(id);
    var result = await _authz.AuthorizeAsync(
        User, doc, "DocumentOwner");
    if (!result.Succeeded) return Forbid();
    return Ok(doc);
}

요구 사항당 여러 처리기 사용하기

하나의 요구 사항에 여러 처리기를 연결할 수 있습니다. 어느 하나라도 성공하면 요구 사항이 충족됩니다. 따라서 OR 조건을 깔끔하게 모델링할 수 있습니다(Fail을 호출하는 처리기가 없는 경우).

// e.g. allow if owner OR if admin role
services.AddSingleton<IAuthorizationHandler, OwnerHandler>();
services.AddSingleton<IAuthorizationHandler, AdminOverrideHandler>();

빠른 확인

처리기에 대한 이해를 확인해 보십시오.

요약

사용자 지정 권한 부여를 구현했습니다.

  • IAuthorizationRequirement는 규칙의 데이터를 담습니다.
  • AuthorizationHandler<T>는 논리를 담고 Succeed를 호출합니다.
  • 처리기를 IAuthorizationHandler로 등록하고 요구 사항을 정책에 연결하십시오.
  • 리소스 기반 처리기와 IAuthorizationService는 특정 인스턴스에 권한을 부여합니다.

이것으로 권한 부여 과정을 마칩니다.

자주 묻는 질문

“사용자 지정 권한 부여 요구 사항” 강의는 무료인가요?

네 — “사용자 지정 권한 부여 요구 사항” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“사용자 지정 권한 부여 요구 사항”에서 뭘 배우나요?

사용자 지정 요구 사항과 처리기를 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“사용자 지정 권한 부여 요구 사항” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 역할 기반 권한 부여
  2. 클레임 기반 권한 부여
  3. 정책 기반 권한 부여
  4. 사용자 지정 권한 부여 요구 사항
← C# Academy(으)로 돌아가기