forked from tangled.org/core
this repo has no description

appview: do not resolve handles for acl checks

Changed files
+13 -9
appview
+1 -1
appview/state/middleware.go
···
return
}
-
ok, err := s.enforcer.E.Enforce(actor.Did, f.Knot, f.OwnerSlashRepo(), requiredPerm)
if err != nil || !ok {
// we need a logged in user
log.Printf("%s does not have perms of a %s in repo %s", actor.Did, requiredPerm, f.OwnerSlashRepo())
···
return
}
+
ok, err := s.enforcer.E.Enforce(actor.Did, f.Knot, f.DidSlashRepo(), requiredPerm)
if err != nil || !ok {
// we need a logged in user
log.Printf("%s does not have perms of a %s in repo %s", actor.Did, requiredPerm, f.OwnerSlashRepo())
+11 -6
appview/state/repo.go
···
}
}()
-
err = s.enforcer.AddCollaborator(collaboratorIdent.DID.String(), f.Knot, f.OwnerSlashRepo())
if err != nil {
w.Write([]byte(fmt.Sprint("failed to add collaborator: ", err)))
return
···
}()
// remove collaborator RBAC
-
repoCollaborators, err := s.enforcer.E.GetImplicitUsersForResourceByDomain(f.OwnerSlashRepo(), f.Knot)
if err != nil {
s.pages.Notice(w, "settings-delete", "Failed to remove collaborators")
return
}
for _, c := range repoCollaborators {
did := c[0]
-
s.enforcer.RemoveCollaborator(did, f.Knot, f.OwnerSlashRepo())
}
log.Println("removed collaborators")
// remove repo RBAC
-
err = s.enforcer.RemoveRepo(f.OwnerDid(), f.Knot, f.OwnerSlashRepo())
if err != nil {
s.pages.Notice(w, "settings-delete", "Failed to update RBAC rules")
return
···
isCollaboratorInviteAllowed := false
if user != nil {
-
ok, err := s.enforcer.IsCollaboratorInviteAllowed(user.Did, f.Knot, f.OwnerSlashRepo())
if err == nil && ok {
isCollaboratorInviteAllowed = true
}
···
return p
}
func (f *FullyResolvedRepo) Collaborators(ctx context.Context, s *State) ([]pages.Collaborator, error) {
-
repoCollaborators, err := s.enforcer.E.GetImplicitUsersForResourceByDomain(f.OwnerSlashRepo(), f.Knot)
if err != nil {
return nil, err
}
···
}
}()
+
err = s.enforcer.AddCollaborator(collaboratorIdent.DID.String(), f.Knot, f.DidSlashRepo())
if err != nil {
w.Write([]byte(fmt.Sprint("failed to add collaborator: ", err)))
return
···
}()
// remove collaborator RBAC
+
repoCollaborators, err := s.enforcer.E.GetImplicitUsersForResourceByDomain(f.DidSlashRepo(), f.Knot)
if err != nil {
s.pages.Notice(w, "settings-delete", "Failed to remove collaborators")
return
}
for _, c := range repoCollaborators {
did := c[0]
+
s.enforcer.RemoveCollaborator(did, f.Knot, f.DidSlashRepo())
}
log.Println("removed collaborators")
// remove repo RBAC
+
err = s.enforcer.RemoveRepo(f.OwnerDid(), f.Knot, f.DidSlashRepo())
if err != nil {
s.pages.Notice(w, "settings-delete", "Failed to update RBAC rules")
return
···
isCollaboratorInviteAllowed := false
if user != nil {
+
ok, err := s.enforcer.IsCollaboratorInviteAllowed(user.Did, f.Knot, f.DidSlashRepo())
if err == nil && ok {
isCollaboratorInviteAllowed = true
}
···
return p
}
+
func (f *FullyResolvedRepo) DidSlashRepo() string {
+
p, _ := securejoin.SecureJoin(f.OwnerDid(), f.RepoName)
+
return p
+
}
+
func (f *FullyResolvedRepo) Collaborators(ctx context.Context, s *State) ([]pages.Collaborator, error) {
+
repoCollaborators, err := s.enforcer.E.GetImplicitUsersForResourceByDomain(f.DidSlashRepo(), f.Knot)
if err != nil {
return nil, err
}
+1 -2
appview/state/repo_util.go
···
func RolesInRepo(s *State, u *auth.User, f *FullyResolvedRepo) pages.RolesInRepo {
if u != nil {
-
ownerSlashRepo := fmt.Sprintf("%s/%s", f.OwnerDid(), f.RepoName)
-
r := s.enforcer.GetPermissionsInRepo(u.Did, f.Knot, ownerSlashRepo)
return pages.RolesInRepo{r}
} else {
return pages.RolesInRepo{}
···
func RolesInRepo(s *State, u *auth.User, f *FullyResolvedRepo) pages.RolesInRepo {
if u != nil {
+
r := s.enforcer.GetPermissionsInRepo(u.Did, f.Knot, f.DidSlashRepo())
return pages.RolesInRepo{r}
} else {
return pages.RolesInRepo{}