···387 if err != nil {
388 return fmt.Errorf("failed to update ACLs: %w", err)
389 }
00390 case models.CommitOperationDelete:
391 rkey := e.Commit.RKey
392···433 if err = i.Enforcer.E.SavePolicy(); err != nil {
434 return fmt.Errorf("failed to save ACLs: %w", err)
435 }
00436 }
437438 return nil
···387 if err != nil {
388 return fmt.Errorf("failed to update ACLs: %w", err)
389 }
390+391+ l.Info("added spindle member")
392 case models.CommitOperationDelete:
393 rkey := e.Commit.RKey
394···435 if err = i.Enforcer.E.SavePolicy(); err != nil {
436 return fmt.Errorf("failed to save ACLs: %w", err)
437 }
438+439+ l.Info("removed spindle member")
440 }
441442 return nil
+4-4
appview/spindles/spindles.go
···619620 if string(spindles[0].Owner) != user.Did {
621 l.Error("unauthorized", "user", user.Did, "owner", spindles[0].Owner)
622- s.Pages.Notice(w, noticeId, "Failed to add member, unauthorized attempt.")
623 return
624 }
625626 member := r.FormValue("member")
627 if member == "" {
628 l.Error("empty member")
629- s.Pages.Notice(w, noticeId, "Failed to add member, empty form.")
630 return
631 }
632 l = l.With("member", member)
···634 memberId, err := s.IdResolver.ResolveIdent(r.Context(), member)
635 if err != nil {
636 l.Error("failed to resolve member identity to handle", "err", err)
637- s.Pages.Notice(w, noticeId, "Failed to add member, identity resolution failed.")
638 return
639 }
640 if memberId.Handle.IsInvalidHandle() {
641 l.Error("failed to resolve member identity to handle")
642- s.Pages.Notice(w, noticeId, "Failed to add member, identity resolution failed.")
643 return
644 }
645
···619620 if string(spindles[0].Owner) != user.Did {
621 l.Error("unauthorized", "user", user.Did, "owner", spindles[0].Owner)
622+ s.Pages.Notice(w, noticeId, "Failed to remove member, unauthorized attempt.")
623 return
624 }
625626 member := r.FormValue("member")
627 if member == "" {
628 l.Error("empty member")
629+ s.Pages.Notice(w, noticeId, "Failed to remove member, empty form.")
630 return
631 }
632 l = l.With("member", member)
···634 memberId, err := s.IdResolver.ResolveIdent(r.Context(), member)
635 if err != nil {
636 l.Error("failed to resolve member identity to handle", "err", err)
637+ s.Pages.Notice(w, noticeId, "Failed to remove member, identity resolution failed.")
638 return
639 }
640 if memberId.Handle.IsInvalidHandle() {
641 l.Error("failed to resolve member identity to handle")
642+ s.Pages.Notice(w, noticeId, "Failed to remove member, identity resolution failed.")
643 return
644 }
645
+15
spindle/db/db.go
···45 unique(owner, name)
46 );
4700000000000000048 -- status event for a single workflow
49 create table if not exists events (
50 rkey text not null,
···45 unique(owner, name)
46 );
4748+ create table if not exists spindle_members (
49+ -- identifiers for the record
50+ id integer primary key autoincrement,
51+ did text not null,
52+ rkey text not null,
53+54+ -- data
55+ instance text not null,
56+ subject text not null,
57+ created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
58+59+ -- constraints
60+ unique (did, instance, subject)
61+ );
62+63 -- status event for a single workflow
64 create table if not exists events (
65 rkey text not null,