Policy-Based Authorization in .NET Core API: User, Groups, and Permissions

You must follow these steps to create users, groups and manage permissions using policy-based authorization in a .NET Core API.

Step 1. Define user and group models.

public class User
{
    public string Id { get; set; }
    public string Name { get; set; }
    // Other user properties
}

public class Group
{
    public string Id { get; set; }
    public string Name { get; set; }
    // Other group properties
}

Step 2. Configure authorization policies in the Startup.cs file.

public void ConfigureServices(IServiceCollection services)
{
    // Other configurations

    services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
        options.AddPolicy("GroupManager", policy => policy.RequireClaim("GroupManager"));
    });

    // Other configurations
}

Step 3. Create a controller to manage users and groups.

[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
    private readonly UserManager<User> _userManager;

    public UserController(UserManager<User> userManager)
    {
        _userManager = userManager;
    }

    [HttpPost]
    [Authorize(Policy = "AdminOnly")]
    public async Task<IActionResult> CreateUser([FromBody] User user)
    {
        // Validate and create the user
        var result = await _userManager.CreateAsync(user);

        if (result.Succeeded)
        {
            return Ok(user);
        }

        return BadRequest(result.Errors);
    }

    // Other CRUD actions for users
}

[ApiController]
[Route("api/[controller]")]
public class GroupController : ControllerBase
{
    private readonly GroupManager<Group> _groupManager;

    public GroupController(GroupManager<Group> groupManager)
    {
        _groupManager = groupManager;
    }

    [HttpPost]
    [Authorize(Policy = "AdminOnly")]
    public async Task<IActionResult> CreateGroup([FromBody] Group group)
    {
        // Validate and create the group
        var result = await _groupManager.CreateAsync(group);

        if (result.Succeeded)
        {
            return Ok(group);
        }

        return BadRequest(result.Errors);
    }

    [HttpPost("{groupId}/users/{userId}")]
    [Authorize(Policy = "GroupManager")]
    public async Task<IActionResult> AddUserToGroup(string groupId, string userId)
    {
        // Check if the current user is authorized to manage the group

        // Add the user to the group
        var group = await _groupManager.FindByIdAsync(groupId);
        var user = await _userManager.FindByIdAsync(userId);

        if (group != null && user != null)
        {
            // Add user to group logic
            // ...

            return Ok();
        }

        return NotFound();
    }

    // Other CRUD actions for groups
}

Step 4. Use the appropriate authentication and authorization middleware in Startup.cs.

public void ConfigureServices(IServiceCollection services)
{
    // Other configurations

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            // Configure JWT bearer authentication options
            // ...
        });

    services.AddAuthorization();

    // Other configurations
}

This code demonstrates a basic implementation of CRUD operations for users and groups using policy-based authorization in a .NET Core API. You can further customize and extend these examples based on your specific requirements and application logic.


Similar Articles