forked from tangled.org/core
Monorepo for Tangled

appview: remove `ResolvedRepo.RolesInRepo()`

replace with rbac enforcer instead

Signed-off-by: Seongmin Lee <git@boltless.me>

authored by boltless.me and committed by Tangled 02ff0c9e e4fc543c

Changed files
+16 -16
appview
issues
pulls
reporesolver
state
+7 -2
appview/issues/issues.go
··· 24 "tangled.org/core/appview/oauth" 25 "tangled.org/core/appview/pages" 26 "tangled.org/core/appview/pages/markup" 27 "tangled.org/core/appview/pagination" 28 "tangled.org/core/appview/reporesolver" 29 "tangled.org/core/appview/validator" 30 "tangled.org/core/idresolver" 31 "tangled.org/core/tid" 32 ) 33 34 type Issues struct { 35 oauth *oauth.OAuth 36 repoResolver *reporesolver.RepoResolver 37 pages *pages.Pages 38 idResolver *idresolver.Resolver 39 db *db.DB ··· 47 func New( 48 oauth *oauth.OAuth, 49 repoResolver *reporesolver.RepoResolver, 50 pages *pages.Pages, 51 idResolver *idresolver.Resolver, 52 db *db.DB, ··· 59 return &Issues{ 60 oauth: oauth, 61 repoResolver: repoResolver, 62 pages: pages, 63 idResolver: idResolver, 64 db: db, ··· 285 return 286 } 287 288 - roles := f.RolesInRepo(user) 289 isRepoOwner := roles.IsOwner() 290 isCollaborator := roles.IsCollaborator() 291 isIssueOwner := user.Did == issue.Did ··· 333 return 334 } 335 336 - roles := f.RolesInRepo(user) 337 isRepoOwner := roles.IsOwner() 338 isCollaborator := roles.IsCollaborator() 339 isIssueOwner := user.Did == issue.Did
··· 24 "tangled.org/core/appview/oauth" 25 "tangled.org/core/appview/pages" 26 "tangled.org/core/appview/pages/markup" 27 + "tangled.org/core/appview/pages/repoinfo" 28 "tangled.org/core/appview/pagination" 29 "tangled.org/core/appview/reporesolver" 30 "tangled.org/core/appview/validator" 31 "tangled.org/core/idresolver" 32 + "tangled.org/core/rbac" 33 "tangled.org/core/tid" 34 ) 35 36 type Issues struct { 37 oauth *oauth.OAuth 38 repoResolver *reporesolver.RepoResolver 39 + enforcer *rbac.Enforcer 40 pages *pages.Pages 41 idResolver *idresolver.Resolver 42 db *db.DB ··· 50 func New( 51 oauth *oauth.OAuth, 52 repoResolver *reporesolver.RepoResolver, 53 + enforcer *rbac.Enforcer, 54 pages *pages.Pages, 55 idResolver *idresolver.Resolver, 56 db *db.DB, ··· 63 return &Issues{ 64 oauth: oauth, 65 repoResolver: repoResolver, 66 + enforcer: enforcer, 67 pages: pages, 68 idResolver: idResolver, 69 db: db, ··· 290 return 291 } 292 293 + roles := repoinfo.RolesInRepo{Roles: rp.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 294 isRepoOwner := roles.IsOwner() 295 isCollaborator := roles.IsCollaborator() 296 isIssueOwner := user.Did == issue.Did ··· 338 return 339 } 340 341 + roles := repoinfo.RolesInRepo{Roles: rp.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 342 isRepoOwner := roles.IsOwner() 343 isCollaborator := roles.IsCollaborator() 344 isIssueOwner := user.Did == issue.Did
+5 -4
appview/pulls/pulls.go
··· 23 "tangled.org/core/appview/oauth" 24 "tangled.org/core/appview/pages" 25 "tangled.org/core/appview/pages/markup" 26 "tangled.org/core/appview/reporesolver" 27 "tangled.org/core/appview/validator" 28 "tangled.org/core/appview/xrpcclient" ··· 877 } 878 879 // Determine PR type based on input parameters 880 - roles := f.RolesInRepo(user) 881 isPushAllowed := roles.IsPushAllowed() 882 isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == "" 883 isForkBased := fromFork != "" && sourceBranch != "" ··· 1674 return 1675 } 1676 1677 - roles := f.RolesInRepo(user) 1678 if !roles.IsPushAllowed() { 1679 log.Println("unauthorized user") 1680 w.WriteHeader(http.StatusUnauthorized) ··· 2261 } 2262 2263 // auth filter: only owner or collaborators can close 2264 - roles := f.RolesInRepo(user) 2265 isOwner := roles.IsOwner() 2266 isCollaborator := roles.IsCollaborator() 2267 isPullAuthor := user.Did == pull.OwnerDid ··· 2335 } 2336 2337 // auth filter: only owner or collaborators can close 2338 - roles := f.RolesInRepo(user) 2339 isOwner := roles.IsOwner() 2340 isCollaborator := roles.IsCollaborator() 2341 isPullAuthor := user.Did == pull.OwnerDid
··· 23 "tangled.org/core/appview/oauth" 24 "tangled.org/core/appview/pages" 25 "tangled.org/core/appview/pages/markup" 26 + "tangled.org/core/appview/pages/repoinfo" 27 "tangled.org/core/appview/reporesolver" 28 "tangled.org/core/appview/validator" 29 "tangled.org/core/appview/xrpcclient" ··· 878 } 879 880 // Determine PR type based on input parameters 881 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 882 isPushAllowed := roles.IsPushAllowed() 883 isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == "" 884 isForkBased := fromFork != "" && sourceBranch != "" ··· 1675 return 1676 } 1677 1678 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 1679 if !roles.IsPushAllowed() { 1680 log.Println("unauthorized user") 1681 w.WriteHeader(http.StatusUnauthorized) ··· 2262 } 2263 2264 // auth filter: only owner or collaborators can close 2265 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 2266 isOwner := roles.IsOwner() 2267 isCollaborator := roles.IsCollaborator() 2268 isPullAuthor := user.Did == pull.OwnerDid ··· 2336 } 2337 2338 // auth filter: only owner or collaborators can close 2339 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 2340 isOwner := roles.IsOwner() 2341 isCollaborator := roles.IsCollaborator() 2342 isPullAuthor := user.Did == pull.OwnerDid
+3 -10
appview/reporesolver/resolver.go
··· 79 func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { 80 repoAt := f.RepoAt() 81 isStarred := false 82 if user != nil { 83 isStarred = db.GetStarStatus(f.rr.execer, user.Did, repoAt) 84 } 85 86 stats := f.RepoStats ··· 130 131 // info related to the session 132 IsStarred: isStarred, 133 - Roles: f.RolesInRepo(user), 134 } 135 136 return repoInfo 137 - } 138 - 139 - func (f *ResolvedRepo) RolesInRepo(u *oauth.User) repoinfo.RolesInRepo { 140 - if u != nil { 141 - r := f.rr.enforcer.GetPermissionsInRepo(u.Did, f.Knot, f.DidSlashRepo()) 142 - return repoinfo.RolesInRepo{Roles: r} 143 - } else { 144 - return repoinfo.RolesInRepo{} 145 - } 146 } 147 148 // extractPathAfterRef gets the actual repository path
··· 79 func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { 80 repoAt := f.RepoAt() 81 isStarred := false 82 + roles := repoinfo.RolesInRepo{} 83 if user != nil { 84 isStarred = db.GetStarStatus(f.rr.execer, user.Did, repoAt) 85 + roles.Roles = f.rr.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo()) 86 } 87 88 stats := f.RepoStats ··· 132 133 // info related to the session 134 IsStarred: isStarred, 135 + Roles: roles, 136 } 137 138 return repoInfo 139 } 140 141 // extractPathAfterRef gets the actual repository path
+1
appview/state/router.go
··· 263 issues := issues.New( 264 s.oauth, 265 s.repoResolver, 266 s.pages, 267 s.idResolver, 268 s.db,
··· 263 issues := issues.New( 264 s.oauth, 265 s.repoResolver, 266 + s.enforcer, 267 s.pages, 268 s.idResolver, 269 s.db,