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  }