Skip to content

User Management

Moka.Auth provides comprehensive user management capabilities through the IUserService interface and REST API endpoints.

User Operations

Creating Users

// Via dependency injection
public class YourService
{
private readonly IUserService _userService;
public YourService(IUserService userService)
{
_userService = userService;
}
public async Task CreateUserAsync()
{
var user = new MokaUser
{
UserName = "john.doe",
Email = "[email protected]",
FirstName = "John",
LastName = "Doe"
};
var result = await _userService.CreateAsync(user, "SecurePassword123!");
if (result)
{
// User created successfully
await _userService.AddToRoleAsync(user.Id, "BasicUser");
}
}
}

Retrieving Users

// Get user by ID
var user = await _userService.FindByIdAsync(userId);
// Get user by username
var user = await _userService.FindByNameAsync(username);
// Get user by email
var user = await _userService.FindByEmailAsync(email);
// Get all users with pagination
var users = await _userService.GetAllUsersAsync(limit: 100, offset: 0);

Updating Users

public async Task UpdateUserAsync(string userId, UserUpdateModel model)
{
var user = await _userService.FindByIdAsync(userId);
if (user != null)
{
user.Email = model.Email;
user.FirstName = model.FirstName;
user.LastName = model.LastName;
var result = await _userService.UpdateAsync(user);
if (result)
{
// User updated successfully
}
}
}

Deleting Users

public async Task DeleteUserAsync(string userId)
{
var result = await _userService.DeleteAsync(userId);
if (result)
{
// User deleted successfully
}
}

Role Management

Managing User Roles

// Add user to role
await _userService.AddToRoleAsync(userId, "Admin");
// Remove user from role
await _userService.RemoveFromRoleAsync(userId, "Admin");
// Get user's roles
var roles = await _userService.GetRolesAsync(userId);

Permission Management

Managing User Permissions

// Add permission by ID
await _userService.AddPermissionAsync(userId, permissionId);
// Add permission by name
await _userService.AddPermissionByNameAsync(userId, "users.manage");
// Remove permission by ID
await _userService.RemovePermissionAsync(userId, permissionId);
// Remove permission by name
await _userService.RemovePermissionByNameAsync(userId, "users.manage");
// Get user's direct permissions
var permissions = await _userService.GetPermissionsAsync(userId);
// Get user's effective permissions (including from roles)
var effectivePermissions = await _userService.GetEffectivePermissionsAsync(userId);

API Key Management

Managing API Keys

// Create API key
var apiKey = await _userService.CreateApiKeyAsync(
userId: "user123",
name: "Development API Key",
expiresAt: DateTimeOffset.UtcNow.AddMonths(6)
);
// Delete API key
await _userService.DeleteApiKeyAsync(apiKeyId);
// Get user's API keys
var apiKeys = await _userService.GetApiKeysAsync(userId);
// Validate API key
var validatedKey = await _userService.ValidateApiKeyAsync(apiKeyString);

API Endpoints

Moka.Auth provides built-in REST API endpoints for user management:

User Operations

  • POST /api/users - Create new user
  • GET /api/users - List all users (paginated)
  • GET /api/users/{id} - Get user by ID
  • PUT /api/users/{id} - Update user
  • DELETE /api/users/{id} - Delete user

Role Operations

  • POST /api/users/{id}/roles - Add user to role
  • DELETE /api/users/{id}/roles/{roleName} - Remove user from role
  • GET /api/users/{id}/roles - Get user’s roles

Permission Operations

  • POST /api/users/{id}/permissions - Add permission to user
  • DELETE /api/users/{id}/permissions/{permissionId} - Remove permission from user
  • GET /api/users/{id}/permissions - Get user’s permissions
  • GET /api/users/{id}/effective-permissions - Get user’s effective permissions

API Key Operations

  • POST /api/users/{id}/api-keys - Create API key
  • DELETE /api/users/{id}/api-keys/{keyId} - Delete API key
  • GET /api/users/{id}/api-keys - List user’s API keys

Best Practices

  1. User Creation:

    • Validate email addresses
    • Enforce strong password requirements
    • Add users to appropriate roles
    • Assign necessary permissions
  2. Security:

    • Always validate user input
    • Use secure password storage
    • Implement rate limiting
    • Monitor failed login attempts
    • Regularly audit user permissions
  3. API Keys:

    • Set appropriate expiration dates
    • Use descriptive names
    • Rotate keys regularly
    • Monitor key usage
    • Store keys securely
  4. Performance:

    • Use pagination for large result sets
    • Cache frequently accessed user data
    • Optimize permission checks
    • Monitor database performance