Monorepo for Tangled tangled.org

appview: remove `ResolvedRepo.RolesInRepo()`

replace with rbac enforcer instead

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

boltless.me 4ae9f822 177f84a6

verified
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" ··· 875 } 876 877 // Determine PR type based on input parameters 878 - roles := f.RolesInRepo(user) 879 isPushAllowed := roles.IsPushAllowed() 880 isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == "" 881 isForkBased := fromFork != "" && sourceBranch != "" ··· 1672 return 1673 } 1674 1675 - roles := f.RolesInRepo(user) 1676 if !roles.IsPushAllowed() { 1677 log.Println("unauthorized user") 1678 w.WriteHeader(http.StatusUnauthorized) ··· 2259 } 2260 2261 // auth filter: only owner or collaborators can close 2262 - roles := f.RolesInRepo(user) 2263 isOwner := roles.IsOwner() 2264 isCollaborator := roles.IsCollaborator() 2265 isPullAuthor := user.Did == pull.OwnerDid ··· 2333 } 2334 2335 // auth filter: only owner or collaborators can close 2336 - roles := f.RolesInRepo(user) 2337 isOwner := roles.IsOwner() 2338 isCollaborator := roles.IsCollaborator() 2339 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" ··· 876 } 877 878 // Determine PR type based on input parameters 879 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 880 isPushAllowed := roles.IsPushAllowed() 881 isBranchBased := isPushAllowed && sourceBranch != "" && fromFork == "" 882 isForkBased := fromFork != "" && sourceBranch != "" ··· 1673 return 1674 } 1675 1676 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 1677 if !roles.IsPushAllowed() { 1678 log.Println("unauthorized user") 1679 w.WriteHeader(http.StatusUnauthorized) ··· 2260 } 2261 2262 // auth filter: only owner or collaborators can close 2263 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 2264 isOwner := roles.IsOwner() 2265 isCollaborator := roles.IsCollaborator() 2266 isPullAuthor := user.Did == pull.OwnerDid ··· 2334 } 2335 2336 // auth filter: only owner or collaborators can close 2337 + roles := repoinfo.RolesInRepo{Roles: s.enforcer.GetPermissionsInRepo(user.Did, f.Knot, f.DidSlashRepo())} 2338 isOwner := roles.IsOwner() 2339 isCollaborator := roles.IsCollaborator() 2340 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
··· 261 issues := issues.New( 262 s.oauth, 263 s.repoResolver, 264 s.pages, 265 s.idResolver, 266 s.db,
··· 261 issues := issues.New( 262 s.oauth, 263 s.repoResolver, 264 + s.enforcer, 265 s.pages, 266 s.idResolver, 267 s.db,