github.com/glide-im/glide@v1.6.0/pkg/subscription/subscription_impl/perm.go (about)

     1  package subscription_impl
     2  
     3  type PermMask int
     4  
     5  const (
     6  	MaskPermRead   PermMask = 1 << iota
     7  	MaskPermWrite           = 1 << iota
     8  	MaskPermAdmin           = 1 << iota
     9  	MaskPermSystem          = 1 << iota
    10  )
    11  
    12  const (
    13  	PermNone  Permission = 0
    14  	PermRead  Permission = 1 << MaskPermRead
    15  	PermWrite Permission = 1 << MaskPermWrite
    16  	PermAdmin Permission = 1 << MaskPermAdmin
    17  )
    18  
    19  type Permission int64
    20  
    21  func (perm Permission) allows(masks ...PermMask) bool {
    22  	for _, m := range masks {
    23  		if perm.denies(m) {
    24  			return false
    25  		}
    26  	}
    27  	return true
    28  }
    29  
    30  func (perm Permission) denies(mask PermMask) bool {
    31  	b := perm >> mask
    32  	return b&1 != 1
    33  }