Skip to main content

abp-authorization

ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects.

소스 정보

저장소
abpframework/abp
최근 소스 활동
2026년 3월 22일 17:13
감지된 SKILL.md 언어
영어
스타
14,437
포크
3,722

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
abp-authorization
description
ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects.
# ABP Authorization > **Docs**: https://abp.io/docs/latest/framework/fundamentals/authorization ## Permission Definition Define permissions in `*.Application.Contracts` project: ```csharp public static class BookStorePermissions { public const string GroupName = "BookStore"; public static class Books { public const string Default = GroupName + ".Books"; public const string Create = Default + ".Create"; public const string Edit = Default + ".Edit"; public const string Delete = Default + ".Delete"; } } ``` Register in provider: ```csharp public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider { public override void Define(IPermissionDefinitionContext context) { var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L("Permission:BookStore")); var booksPermission = bookStoreGroup.AddPermission( BookStorePermissions.Books.Default, L("Permission:Books")); booksPermission.AddChild( BookStorePermissions.Books.Create, L("Permission:Books.Create")); booksPermission.AddChild( BookStorePermissions.Books.Edit, L("Permission:Books.Edit")); booksPermission.AddChild( BookStorePermissions.Books.Delete, L("Permission:Books.Delete")); } private static LocalizableString L(string name) { return LocalizableString.Create<BookStoreResource>(name); } } ``` ## Using Permissions ### Declarative (Attribute) ```csharp [Authorize(BookStorePermissions.Books.Create)] public virtual async Task<BookDto> CreateAsync(CreateBookDto input) { // Only users with Books.Create permission can execute } ``` ### Programmatic Check ```csharp public class BookAppService : ApplicationService { public async Task DoSomethingAsync() { // Check and throw if not granted await CheckPolicyAsync(BookStorePermissions.Books.Edit); // Or check without throwing if (await IsGrantedAsync(BookStorePermissions.Books.Delete)) { // Has permission } } } ``` ### Allow Anonymous Access ```csharp [AllowAnonymous] public virtual async Task<BookDto> GetPublicBookAsync(Guid id) { // No authentication required } ``` ## Current User Access authenticated user info via `CurrentUser` property (available in base classes like `ApplicationService`, `DomainService`, `AbpController`): ```csharp public class BookAppService : ApplicationService { public async Task DoSomethingAsync() { // CurrentUser is available from base class - no injection needed var userId = CurrentUser.Id; var userName = CurrentUser.UserName; var email = CurrentUser.Email; var isAuthenticated = CurrentUser.IsAuthenticated; var roles = CurrentUser.Roles; var tenantId = CurrentUser.TenantId; } } // In other services, inject ICurrentUser public class MyService : ITransientDependency { private readonly ICurrentUser _currentUser; public MyService(ICurrentUser currentUser) => _currentUser = currentUser; } ``` ### Ownership Validation ```csharp public async Task UpdateMyBookAsync(Guid bookId, UpdateBookDto input) { var book = await _bookRepository.GetAsync(bookId); if (book.CreatorId != CurrentUser.Id) { throw new AbpAuthorizationException(); } // Update book... } ``` ## Multi-Tenancy Permissions Control permission availability per tenant side: ```csharp bookStoreGroup.AddPermission( BookStorePermissions.Books.Default, L("Permission:Books"), multiTenancySide: MultiTenancySides.Tenant // Only for tenants ); ``` Options: `MultiTenancySides.Host`, `Tenant`, or `Both` ## Feature-Dependent Permissions ```csharp booksPermission.RequireFeatures("BookStore.PremiumFeature"); ``` ## Permission Management Grant/revoke permissions programmatically: ```csharp public class MyService : ITransientDependency { private readonly IPermissionManager _permissionManager; public async Task GrantPermissionToUserAsync(Guid userId, string permissionName) { await _permissionManager.SetForUserAsync(userId, permissionName, true); } public async Task GrantPermissionToRoleAsync(string roleName, string permissionName) { await _permissionManager.SetForRoleAsync(roleName, permissionName, true); } } ``` ## Security Best Practices - Never trust client input for user identity - Use `CurrentUser` property (from base class) or inject `ICurrentUser` - Validate ownership in application service methods - Filter queries by current user when appropriate - Don't expose sensitive fields in DTOs
GitHub에서 보기