github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgPermission/kmgPermission.go (about)

     1  package kmgPermission
     2  
     3  import "strings"
     4  
     5  type IsAllower interface {
     6  	IsAllow(args map[string]string) bool
     7  }
     8  
     9  // 如果这些判断的某一个失败,则该权限失败,如果都通过,则该权限通过.
    10  type And []IsAllower
    11  
    12  func (and And) IsAllow(args map[string]string) bool {
    13  	for _, allower := range and {
    14  		if !allower.IsAllow(args) {
    15  			return false
    16  		}
    17  	}
    18  	return true
    19  }
    20  
    21  // 如果这些判断的某一个通过,则该权限通过,如果都不通过,则不通过.
    22  type Or []IsAllower
    23  
    24  func (or Or) IsAllow(args map[string]string) bool {
    25  	for _, allower := range or {
    26  		if allower.IsAllow(args) {
    27  			return true
    28  		}
    29  	}
    30  	return false
    31  }
    32  
    33  type Not struct {
    34  	IsAllower IsAllower
    35  }
    36  
    37  func (not Not) IsAllow(args map[string]string) bool {
    38  	return !not.IsAllower.IsAllow(args)
    39  }
    40  
    41  type Prefix string
    42  
    43  func (prefix Prefix) IsAllow(args map[string]string) bool {
    44  	return strings.HasPrefix(args["n"], string(prefix))
    45  }
    46  
    47  var True IsAllower = tTrue{}
    48  
    49  type tTrue struct{}
    50  
    51  func (t tTrue) IsAllow(args map[string]string) bool {
    52  	return true
    53  }