You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

access_mode.go 1.5KB

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