github.com/pavlo67/common@v0.5.3/common/rbac/roles.go (about)

     1  package rbac
     2  
     3  import (
     4  	"encoding/json"
     5  )
     6  
     7  type Role string
     8  
     9  const (
    10  	RoleAdmin Role = "admin"
    11  	RoleUser  Role = "user"
    12  )
    13  
    14  type Roles []Role
    15  
    16  func (roles Roles) Has(role ...Role) bool {
    17  	for _, oneOf := range role {
    18  		for _, r := range roles {
    19  			if r == oneOf {
    20  				//logPrintf("checked (%#v) as (%#v): true", role, roles)
    21  				return true
    22  			}
    23  		}
    24  	}
    25  
    26  	//logPrintf("checked (%#v) as (%#v): false", role, roles)
    27  
    28  	return false
    29  }
    30  
    31  func (roles Roles) Filter(role ...Role) Roles {
    32  	var rolesFiltered Roles
    33  	for _, r := range roles {
    34  		for _, oneOf := range role {
    35  			if r == oneOf {
    36  				rolesFiltered = append(rolesFiltered, r)
    37  			}
    38  		}
    39  	}
    40  
    41  	return rolesFiltered
    42  }
    43  
    44  func (roles Roles) FilterNot(role ...Role) Roles {
    45  	var rolesFiltered Roles
    46  
    47  ROLES:
    48  	for _, r := range roles {
    49  		for _, oneOf := range role {
    50  			if r == oneOf {
    51  				continue ROLES
    52  			}
    53  		}
    54  		rolesFiltered = append(rolesFiltered, r)
    55  	}
    56  
    57  	return rolesFiltered
    58  }
    59  
    60  func (roles Roles) MarshalJSON() ([]byte, error) {
    61  	if len(roles) < 1 {
    62  		return []byte("[]"), nil
    63  	}
    64  
    65  	var rs []string
    66  
    67  	for _, r := range roles {
    68  		rs = append(rs, string(r))
    69  	}
    70  
    71  	bytes, err := json.Marshal(rs)
    72  	return bytes, err
    73  }
    74  
    75  func (roles Roles) ToStringList() []string {
    76  	l := make([]string, 0, len(roles))
    77  	for _, role := range roles {
    78  		l = append(l, string(role))
    79  	}
    80  	return l
    81  }