# HopFrame Admin Pages Admin pages can be defined through a `AdminContext` similar to how a `DbContext` is defined. They generate administration pages like [`/administration/users`](./pages.md) simply by reading the structure of the provided model and optionally some additional configuration. > **Fun fact:** The already existing pages `/administration/users` and `/administration/groups` are also generated using an internal `AdminContext`. ## Usage 1. Create a class that inherits the `AdminPagesContext` base class ```csharp public class AdminContext : AdminPagesContext { } ``` 2. Add your admin pages as properties to the class ```csharp public class AdminContext : AdminPagesContext { public AdminPage
Addresses { get; set; } public AdminPage Employees { get; set; } } ``` 3. **Optionally** you can further configure your pages in the `OnModelCreating` method ```csharp public class AdminContext : AdminPagesContext { public AdminPage
Addresses { get; set; } public AdminPage Employees { get; set; } public override void OnModelCreating(IAdminContextGenerator generator) { base.OnModelCreating(generator); generator.Page() .Property(e => e.Address) .IsSelector(); generator.Page
() .Property(a => a.Employee) .Ignore(); generator.Page
() .Property(a => a.AddressId) .IsSelector() .Parser((model, e) => model.AddressId = e.EmployeeId); generator.Page() .ConfigureRepository() .ListingProperty(e => e.Name); generator.Page
() .ConfigureRepository() .ListingProperty(a => a.City); } } ``` 4. **Optionally** you can also add some of the following attributes to your classes / properties to further configure the admin pages:\ \ Attributes for classes: ```csharp [AttributeUsage(AttributeTargets.Class)] public sealed class AdminButtonConfigAttribute(bool showCreateButton = true, bool showDeleteButton = true, bool showUpdateButton = true) : Attribute { public bool ShowCreateButton { get; set; } = showCreateButton; public bool ShowDeleteButton { get; set; } = showDeleteButton; public bool ShowUpdateButton { get; set; } = showUpdateButton; } ``` ```csharp [AttributeUsage(AttributeTargets.Class)] public sealed class AdminPermissionsAttribute(string view = null, string create = null, string update = null, string delete = null) : Attribute { public AdminPagePermissions Permissions { get; set; } = new() { Create = create, Update = update, Delete = delete, View = view }; } ``` ```csharp [AttributeUsage(AttributeTargets.Class)] public class AdminUrlAttribute(string url) : Attribute { public string Url { get; set; } = url; } ``` Attributes for properties: ```csharp [AttributeUsage(AttributeTargets.Property)] public sealed class AdminHideValueAttribute : Attribute; ``` ```csharp [AttributeUsage(AttributeTargets.Property)] public sealed class AdminIgnoreAttribute(bool onlyForListing = false) : Attribute { public bool OnlyForListing { get; set; } = onlyForListing; } ``` ```csharp [AttributeUsage(AttributeTargets.Property)] public sealed class AdminPrefixAttribute(string prefix) : Attribute { public string Prefix { get; set; } = prefix; } ``` ```csharp [AttributeUsage(AttributeTargets.Property)] public sealed class AdminUneditableAttribute : Attribute; ``` ```csharp [AttributeUsage(AttributeTargets.Property)] public class AdminUniqueAttribute : Attribute; ``` ```csharp [AttributeUsage(AttributeTargets.Property)] public sealed class AdminUnsortableAttribute : Attribute; ``` ```csharp [AttributeUsage(AttributeTargets.Property)] public sealed class ListingPropertyAttribute : Attribute; ```