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 }