summaryrefslogtreecommitdiffstats
path: root/models/access.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2021-11-28 19:58:28 +0800
committerGitHub <noreply@github.com>2021-11-28 12:58:28 +0100
commit1fee11d69a437ec7e68b3f6b645827592fe77292 (patch)
tree1fca452f96746d9f7cc8c31723e3c365155cf96d /models/access.go
parent24a8d54bfb908a2371cb808a5243b3290dd0664a (diff)
downloadgitea-1fee11d69a437ec7e68b3f6b645827592fe77292.tar.gz
gitea-1fee11d69a437ec7e68b3f6b645827592fe77292.zip
Move accessmode into models/perm (#17828)
Diffstat (limited to 'models/access.go')
-rw-r--r--models/access.go84
1 files changed, 17 insertions, 67 deletions
diff --git a/models/access.go b/models/access.go
index 01b37dd7ae..f7252019aa 100644
--- a/models/access.go
+++ b/models/access.go
@@ -9,60 +9,10 @@ import (
"fmt"
"code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/models/perm"
user_model "code.gitea.io/gitea/models/user"
- "code.gitea.io/gitea/modules/log"
)
-// AccessMode specifies the users access mode
-type AccessMode int
-
-const (
- // AccessModeNone no access
- AccessModeNone AccessMode = iota // 0
- // AccessModeRead read access
- AccessModeRead // 1
- // AccessModeWrite write access
- AccessModeWrite // 2
- // AccessModeAdmin admin access
- AccessModeAdmin // 3
- // AccessModeOwner owner access
- AccessModeOwner // 4
-)
-
-func (mode AccessMode) String() string {
- switch mode {
- case AccessModeRead:
- return "read"
- case AccessModeWrite:
- return "write"
- case AccessModeAdmin:
- return "admin"
- case AccessModeOwner:
- return "owner"
- default:
- return "none"
- }
-}
-
-// ColorFormat provides a ColorFormatted version of this AccessMode
-func (mode AccessMode) ColorFormat(s fmt.State) {
- log.ColorFprintf(s, "%d:%s",
- log.NewColoredIDValue(mode),
- mode)
-}
-
-// ParseAccessMode returns corresponding access mode to given permission string.
-func ParseAccessMode(permission string) AccessMode {
- switch permission {
- case "write":
- return AccessModeWrite
- case "admin":
- return AccessModeAdmin
- default:
- return AccessModeRead
- }
-}
-
// Access represents the highest access level of a user to the repository. The only access type
// that is not in this table is the real owner of a repository. In case of an organization
// repository, the members of the owners team are in this table.
@@ -70,15 +20,15 @@ type Access struct {
ID int64 `xorm:"pk autoincr"`
UserID int64 `xorm:"UNIQUE(s)"`
RepoID int64 `xorm:"UNIQUE(s)"`
- Mode AccessMode
+ Mode perm.AccessMode
}
func init() {
db.RegisterModel(new(Access))
}
-func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMode, error) {
- mode := AccessModeNone
+func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (perm.AccessMode, error) {
+ mode := perm.AccessModeNone
var userID int64
restricted := false
@@ -88,7 +38,7 @@ func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMo
}
if !restricted && !repo.IsPrivate {
- mode = AccessModeRead
+ mode = perm.AccessModeRead
}
if userID == 0 {
@@ -96,7 +46,7 @@ func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMo
}
if userID == repo.OwnerID {
- return AccessModeOwner, nil
+ return perm.AccessModeOwner, nil
}
a := &Access{UserID: userID, RepoID: repo.ID}
@@ -106,8 +56,8 @@ func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMo
return a.Mode, nil
}
-func maxAccessMode(modes ...AccessMode) AccessMode {
- max := AccessModeNone
+func maxAccessMode(modes ...perm.AccessMode) perm.AccessMode {
+ max := perm.AccessModeNone
for _, mode := range modes {
if mode > max {
max = mode
@@ -118,11 +68,11 @@ func maxAccessMode(modes ...AccessMode) AccessMode {
type userAccess struct {
User *user_model.User
- Mode AccessMode
+ Mode perm.AccessMode
}
// updateUserAccess updates an access map so that user has at least mode
-func updateUserAccess(accessMap map[int64]*userAccess, user *user_model.User, mode AccessMode) {
+func updateUserAccess(accessMap map[int64]*userAccess, user *user_model.User, mode perm.AccessMode) {
if ua, ok := accessMap[user.ID]; ok {
ua.Mode = maxAccessMode(ua.Mode, mode)
} else {
@@ -132,9 +82,9 @@ func updateUserAccess(accessMap map[int64]*userAccess, user *user_model.User, mo
// FIXME: do cross-comparison so reduce deletions and additions to the minimum?
func (repo *Repository) refreshAccesses(e db.Engine, accessMap map[int64]*userAccess) (err error) {
- minMode := AccessModeRead
+ minMode := perm.AccessModeRead
if !repo.IsPrivate {
- minMode = AccessModeWrite
+ minMode = perm.AccessModeWrite
}
newAccesses := make([]Access, 0, len(accessMap))
@@ -208,7 +158,7 @@ func (repo *Repository) recalculateTeamAccesses(e db.Engine, ignTeamID int64) (e
// Owner team gets owner access, and skip for teams that do not
// have relations with repository.
if t.IsOwnerTeam() {
- t.Authorize = AccessModeOwner
+ t.Authorize = perm.AccessModeOwner
} else if !t.hasRepository(e, repo.ID) {
continue
}
@@ -227,12 +177,12 @@ func (repo *Repository) recalculateTeamAccesses(e db.Engine, ignTeamID int64) (e
// recalculateUserAccess recalculates new access for a single user
// Usable if we know access only affected one user
func (repo *Repository) recalculateUserAccess(e db.Engine, uid int64) (err error) {
- minMode := AccessModeRead
+ minMode := perm.AccessModeRead
if !repo.IsPrivate {
- minMode = AccessModeWrite
+ minMode = perm.AccessModeWrite
}
- accessMode := AccessModeNone
+ accessMode := perm.AccessModeNone
collaborator, err := repo.getCollaboration(e, uid)
if err != nil {
return err
@@ -255,7 +205,7 @@ func (repo *Repository) recalculateUserAccess(e db.Engine, uid int64) (err error
for _, t := range teams {
if t.IsOwnerTeam() {
- t.Authorize = AccessModeOwner
+ t.Authorize = perm.AccessModeOwner
}
accessMode = maxAccessMode(accessMode, t.Authorize)