namespace Wishlist.Data; public static class ProjectRoles { public static ProjectRole UserRole => new("User", "USER", "User Role"); public static ProjectRole AdminRole => new("Admin", "ADMIN", "Admin Role"); public static ProjectRole[] Roles => [UserRole, AdminRole]; } public static class ProjectPolicies { public static ProjectPolicy BlogPostCreateClaimPolicy => new(nameof(BlogPostCreateClaimPolicy), [ProjectClaims.BlogPostCreate]); public static ProjectPolicy BlogPostReadClaimPolicy => new(nameof(BlogPostReadClaimPolicy), [ProjectClaims.BlogPostRead]); public static ProjectPolicy BlogPostUpdateClaimPolicy => new(nameof(BlogPostUpdateClaimPolicy), [ProjectClaims.BlogPostUpdate]); public static ProjectPolicy BlogPostDeleteClaimPolicy => new(nameof(BlogPostDeleteClaimPolicy), [ProjectClaims.BlogPostDelete]); public static ProjectPolicy WishlistViewPolicy => new(nameof(WishlistViewPolicy), [ProjectClaims.WishlistView]); public static ProjectPolicy WishlistCreatePolicy => new(nameof(WishlistCreatePolicy), [ProjectClaims.WishlistCreate]); public static ProjectPolicy WishlistMarkAsBuyingPolicy => new(nameof(WishlistMarkAsBuyingPolicy), [ProjectClaims.WishlistMarkAsBuying]); } public static class ProjectClaims { public static ProjectClaim BlogPostCreate => new("BlogPost", "Create"); public static ProjectClaim BlogPostRead => new("BlogPost", "Read"); public static ProjectClaim BlogPostUpdate => new("BlogPost", "Update"); public static ProjectClaim BlogPostDelete => new("BlogPost", "Delete"); public static ProjectClaim WishlistView => new("Wishlist", "View"); public static ProjectClaim WishlistCreate => new("Wishlist", "Create"); public static ProjectClaim WishlistMarkAsBuying => new("Wishlist", "MarkAsBuying"); public static List GetBlogPostClaims => [BlogPostCreate, BlogPostRead, BlogPostUpdate, BlogPostDelete]; public static List GetWishlistClaims => [WishlistView, WishlistCreate, WishlistMarkAsBuying]; public static List> GetAllClaims = [GetBlogPostClaims, GetWishlistClaims]; } public class ProjectPolicy(string name, ProjectClaim[] requiredClaims) { public string Name { get; set; } = name; public ProjectClaim[] RequiredClaims { get; set; } = requiredClaims; public ProjectRole[] RequiredRoles { get; set; } = []; } public class ProjectClaim(string type, string value) { public string Type { get; set; } = type; public string Value { get; set; } = value; } public class ProjectRole(string roleName, string normalizedName, string description) { public string RoleName { get; set; } = roleName; public string NormalizedName { get; set; } = normalizedName; public string Description { get; set; } = description; }