Yeditepe.Auth.Abstractions 1.0.0

dotnet add package Yeditepe.Auth.Abstractions --version 1.0.0
                    
NuGet\Install-Package Yeditepe.Auth.Abstractions -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Yeditepe.Auth.Abstractions" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Yeditepe.Auth.Abstractions" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Yeditepe.Auth.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Yeditepe.Auth.Abstractions --version 1.0.0
                    
#r "nuget: Yeditepe.Auth.Abstractions, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Yeditepe.Auth.Abstractions@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Yeditepe.Auth.Abstractions&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Yeditepe.Auth.Abstractions&version=1.0.0
                    
Install as a Cake Tool

Yeditepe.Auth.Abstractions

Yeditepe.Auth kütüphanesi için interface ve DTO tanımları. Bu paket, tam implementasyona ihtiyaç duymadan authentication servislerine bağımlılık almak isteyen projeler için tasarlanmıştır.

Kurulum

dotnet add package Yeditepe.Auth.Abstractions

Ne Zaman Kullanılır?

Bu paketi aşağıdaki durumlarda kullanın:

  • Domain Layer: Sadece interface'lere ihtiyaç duyduğunuzda
  • Application Layer: Service interface'lerini inject etmek istediğinizde
  • Test Projeleri: Mock'lamak için interface'lere ihtiyaç duyduğunuzda
  • Shared Libraries: Authentication bağımlılığı olmadan DTO'ları paylaşmak istediğinizde

Tam implementasyon için Yeditepe.Auth paketini kullanın.

İçerik

Interfaces

ICurrentUserService

Mevcut kullanıcı bilgilerine erişim sağlar.

public interface ICurrentUserService
{
    Guid? UserId { get; }
    string? Email { get; }
    Guid? TenantId { get; }
    Guid? ApplicationId { get; }
    string? DeviceId { get; }
    IReadOnlyList<string> Roles { get; }
    IReadOnlyList<string> Permissions { get; }
    bool IsAuthenticated { get; }

    bool IsInRole(string role);
    bool HasPermission(string permission);
    bool HasAnyPermission(params string[] permissions);
    bool HasAllPermissions(params string[] permissions);
}
ITokenService

JWT token işlemleri için servis.

public interface ITokenService
{
    string GenerateAccessToken(
        Guid userId,
        string email,
        Guid tenantId,
        string deviceId,
        UserAuthorizationResult authorization,
        UserInfo? userInfo = null);

    ClaimsPrincipal? ValidateToken(string token);
    ClaimsPrincipal? DecodeToken(string token);

    Guid? GetUserId(ClaimsPrincipal principal);
    Guid? GetTenantId(ClaimsPrincipal principal);
    Guid? GetApplicationId(ClaimsPrincipal principal);
    string? GetDeviceId(ClaimsPrincipal principal);
}
IIdentityClient

Identity Platform ile iletişim için HTTP client.

public interface IIdentityClient
{
    Task<IdentityLoginResult> LoginAsync(
        string email,
        string password,
        Guid tenantId,
        string deviceId,
        string? deviceFingerprint = null,
        bool trustDevice = false,
        string? userAgent = null,
        CancellationToken cancellationToken = default);

    Task<IdentityRefreshResult> RefreshAsync(
        string refreshToken,
        string deviceId,
        CancellationToken cancellationToken = default);

    Task<bool> UserExistsAsync(
        string email,
        CancellationToken cancellationToken = default);

    Task LogoutAsync(
        string refreshToken,
        string deviceId,
        CancellationToken cancellationToken = default);

    Task LogoutAllAsync(
        Guid userId,
        CancellationToken cancellationToken = default);
}
ICorpPanelClient

CorpPanel ile iletişim için HTTP client.

public interface ICorpPanelClient
{
    Task<UserTenantsResult> GetUserTenantsAsync(
        Guid identityUserId,
        CancellationToken cancellationToken = default);

    Task<UserAuthorizationResult?> GetUserAuthorizationAsync(
        Guid identityUserId,
        Guid tenantId,
        Guid applicationId,
        CancellationToken cancellationToken = default);

    Task UpdateLastAccessedTenantAsync(
        Guid identityUserId,
        Guid tenantId,
        CancellationToken cancellationToken = default);

    Task<TenantResult?> GetTenantAsync(
        Guid tenantId,
        CancellationToken cancellationToken = default);
}

Data Transfer Objects (DTOs)

Identity Platform DTOs
// Login sonucu - base class
public abstract record IdentityLoginResult;

// Başarılı login
public record IdentityLoginSuccessResult : IdentityLoginResult
{
    public string AccessToken { get; init; }
    public string RefreshToken { get; init; }
    public DateTime ExpiresAt { get; init; }
}

// MFA gerekli
public record IdentityMfaRequiredResult : IdentityLoginResult
{
    public string SessionToken { get; init; }
    public List<string> AvailableChannels { get; init; }
    public DateTime ExpiresAt { get; init; }
}

// Refresh sonucu
public record IdentityRefreshResult
{
    public string AccessToken { get; init; }
    public string RefreshToken { get; init; }
    public DateTime ExpiresAt { get; init; }
}
CorpPanel DTOs
// Kullanıcının tenant'ları
public record UserTenantsResult(
    bool Success,
    Guid? LastAccessedTenantId,
    IReadOnlyList<CorpPanelTenantResult> Tenants);

// Tenant bilgisi
public record CorpPanelTenantResult(
    Guid TenantId,
    string TenantCode,
    string TenantName,
    string AccessLevel,
    bool IsActive,
    string? FirstName,
    string? LastName,
    string? FullName);

// Yetkilendirme sonucu
public record UserAuthorizationResult(
    Guid PrincipalId,
    Guid TenantPrincipalId,
    bool IsActive,
    string? FirstName,
    string? LastName,
    IReadOnlyList<string> Roles,
    IReadOnlyList<string> Permissions);

// Tenant sonucu
public record TenantResult(
    Guid Id,
    string Name,
    string Code,
    bool IsActive);
User Info
public record UserInfo
{
    public Guid UserId { get; init; }
    public string Email { get; init; }
    public string? FirstName { get; init; }
    public string? LastName { get; init; }
    public string? FullName { get; init; }
    public IReadOnlyList<string> Roles { get; init; }
    public IReadOnlyList<string> Permissions { get; init; }
}

Kullanım Örnekleri

Domain Service'de Kullanım

// Domain.csproj - Sadece Abstractions referansı
// <PackageReference Include="Yeditepe.Auth.Abstractions" />

public class OrderDomainService
{
    private readonly ICurrentUserService _currentUser;

    public OrderDomainService(ICurrentUserService currentUser)
    {
        _currentUser = currentUser;
    }

    public bool CanUserAccessOrder(Order order)
    {
        // Aynı tenant'ta mı?
        if (order.TenantId != _currentUser.TenantId)
            return false;

        // Admin her şeye erişebilir
        if (_currentUser.IsInRole("Admin"))
            return true;

        // Kendi siparişi mi?
        if (order.CreatedByUserId == _currentUser.UserId)
            return true;

        // İzni var mı?
        return _currentUser.HasPermission("orders.view.all");
    }
}

Test Projelerinde Mock'lama

using Moq;

public class OrderServiceTests
{
    [Fact]
    public void CanUserAccessOrder_WhenAdmin_ReturnsTrue()
    {
        // Arrange
        var mockCurrentUser = new Mock<ICurrentUserService>();
        mockCurrentUser.Setup(x => x.TenantId).Returns(Guid.NewGuid());
        mockCurrentUser.Setup(x => x.IsInRole("Admin")).Returns(true);

        var service = new OrderDomainService(mockCurrentUser.Object);
        var order = new Order { TenantId = mockCurrentUser.Object.TenantId!.Value };

        // Act
        var result = service.CanUserAccessOrder(order);

        // Assert
        Assert.True(result);
    }
}

Application Layer'da Kullanım

// Application.csproj - Sadece Abstractions referansı
// <PackageReference Include="Yeditepe.Auth.Abstractions" />

public class CreateOrderCommandHandler
{
    private readonly ICurrentUserService _currentUser;
    private readonly IOrderRepository _orderRepository;

    public CreateOrderCommandHandler(
        ICurrentUserService currentUser,
        IOrderRepository orderRepository)
    {
        _currentUser = currentUser;
        _orderRepository = orderRepository;
    }

    public async Task<OrderDto> Handle(CreateOrderCommand command)
    {
        if (!_currentUser.HasPermission("orders.create"))
        {
            throw new ForbiddenException("orders.create permission required");
        }

        var order = new Order
        {
            TenantId = _currentUser.TenantId!.Value,
            CreatedByUserId = _currentUser.UserId!.Value,
            // ...
        };

        await _orderRepository.AddAsync(order);
        return order.ToDto();
    }
}

Paket Yapısı

Yeditepe.Auth.Abstractions/
├── ICurrentUserService.cs      # Mevcut kullanıcı servisi interface'i
├── ITokenService.cs            # Token servisi interface'i
├── IIdentityClient.cs          # Identity Platform client interface'i
├── ICorpPanelClient.cs         # CorpPanel client interface'i
├── IdentityLoginResult.cs      # Login sonuç DTO'ları
├── IdentityRefreshResult.cs    # Refresh sonuç DTO'su
├── UserTenantsResult.cs        # Tenant listesi DTO'su
├── UserAuthorizationResult.cs  # Yetkilendirme DTO'su
├── TenantResult.cs             # Tenant bilgisi DTO'su
└── UserInfo.cs                 # Kullanıcı bilgisi DTO'su

Bağımlılıklar

Bu paket sıfır dış bağımlılık ile tasarlanmıştır. Sadece .NET BCL kullanır.

İlişkili Paketler

Paket Açıklama
Yeditepe.Auth Tam implementasyon (API projeleri için)
Yeditepe.Auth.Abstractions Sadece interface'ler (bu paket)

Lisans

MIT License - Yeditepe Software © 2024

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Yeditepe.Auth.Abstractions:

Package Downloads
Yeditepe.Auth

Shared authentication library for Yeditepe Pro applications. Provides authentication services for multi-tenant applications integrated with Identity Platform and CorpPanel.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 326 12/17/2025