code.gitea.io/gitea@v1.22.3/models/perm/access_mode.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package perm 5 6 import ( 7 "fmt" 8 "slices" 9 10 "code.gitea.io/gitea/modules/util" 11 ) 12 13 // AccessMode specifies the users access mode 14 type AccessMode int 15 16 const ( 17 AccessModeNone AccessMode = iota // 0: no access 18 19 AccessModeRead // 1: read access 20 AccessModeWrite // 2: write access 21 AccessModeAdmin // 3: admin access 22 AccessModeOwner // 4: owner access 23 ) 24 25 // ToString returns the string representation of the access mode, do not make it a Stringer, otherwise it's difficult to render in templates 26 func (mode AccessMode) ToString() string { 27 switch mode { 28 case AccessModeRead: 29 return "read" 30 case AccessModeWrite: 31 return "write" 32 case AccessModeAdmin: 33 return "admin" 34 case AccessModeOwner: 35 return "owner" 36 default: 37 return "none" 38 } 39 } 40 41 func (mode AccessMode) LogString() string { 42 return fmt.Sprintf("<AccessMode:%d:%s>", mode, mode.ToString()) 43 } 44 45 // ParseAccessMode returns corresponding access mode to given permission string. 46 func ParseAccessMode(permission string, allowed ...AccessMode) AccessMode { 47 m := AccessModeNone 48 switch permission { 49 case "read": 50 m = AccessModeRead 51 case "write": 52 m = AccessModeWrite 53 case "admin": 54 m = AccessModeAdmin 55 default: 56 // the "owner" access is not really used for user input, it's mainly for checking access level in code, so don't parse it 57 } 58 if len(allowed) == 0 { 59 return m 60 } 61 return util.Iif(slices.Contains(allowed, m), m, AccessModeNone) 62 }