UserManagementComponent.vala 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Astralis;
  2. using Inversion;
  3. using Spry.Authorisation;
  4. namespace Spry.Authentication {
  5. public class UserManagementComponent : Component {
  6. public int page_number { get; set; default = 0; }
  7. public string authorisation_permission { get; set; default = "spry.admin"; }
  8. public bool authorised { get; set; }
  9. public const int64 users_per_page = 20;
  10. public override string markup { get { return """
  11. <spry-context property="page_number" />
  12. <div spry-if="!this.authorised">
  13. <strong>You must have the permission <code content-expr="this.authorisation_permission"></code> to access this content.</strong>
  14. </div>
  15. <div spry-else sid="container" style="gap: 1em;">
  16. <spry-outlet sid="outlet" />
  17. <div>
  18. <button spry-action=":previous" spry-target="container">Previous</button>
  19. <span>Page <strong content-expr="stringify(this.page_number + 1)"></strong></span>
  20. <button spry-action=":next" spry-target="container">Next</button>
  21. </div>
  22. </div>
  23. """; }}
  24. private UserService user_service = inject<UserService>();
  25. private AuthorisationContext authorisation_context = inject<AuthorisationContext>();
  26. private ComponentFactory component_factory = inject<ComponentFactory>();
  27. public async override void prepare () throws Error {
  28. if(authorisation_context.is_anonymous() || !authorisation_context.has_permission (authorisation_permission)) {
  29. authorised = false;
  30. return;
  31. }
  32. authorised = true;
  33. var users = yield user_service.list_users (page_number * users_per_page, page_number * users_per_page + users_per_page);
  34. foreach (var user in users) {
  35. var component = component_factory.create<UserComponent>();
  36. component.user_id = (int)user.id;
  37. component.user = user;
  38. add_outlet_child ("outlet", component);
  39. }
  40. }
  41. public async override void handle_action(string action) {
  42. if(action == "previous") {
  43. page_number --;
  44. if(page_number < 0) {
  45. page_number = 0;
  46. }
  47. }
  48. if(action == "next") {
  49. page_number ++;
  50. }
  51. }
  52. }
  53. }