using Astralis;
using Inversion;
using Spry.Authorisation;
namespace Spry.Authentication {
public class UserManagementComponent : Component {
public int page_number { get; set; default = 0; }
public string authorisation_permission { get; set; default = "spry.admin"; }
public bool authorised { get; set; }
public const int64 users_per_page = 20;
public override string markup { get { return """
You must have the permission to access this content.
"""; }}
private UserService user_service = inject();
private AuthorisationContext authorisation_context = inject();
private ComponentFactory component_factory = inject();
public async override void prepare () throws Error {
if(authorisation_context.is_anonymous() || !authorisation_context.has_permission (authorisation_permission)) {
authorised = false;
return;
}
authorised = true;
var users = yield user_service.list_users (page_number * users_per_page, page_number * users_per_page + users_per_page);
foreach (var user in users) {
var component = component_factory.create();
component.user_id = (int)user.id;
component.user = user;
add_outlet_child ("outlet", component);
}
}
public async override void handle_action(string action) {
if(action == "previous") {
page_number --;
if(page_number < 0) {
page_number = 0;
}
}
if(action == "next") {
page_number ++;
}
}
}
}