59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package g8
 | |
| 
 | |
| // Client is a struct containing both a Token and a slice of extra Permissions that said token has.
 | |
| type Client struct {
 | |
| 	// Token is the value used to authenticate with the API.
 | |
| 	Token string
 | |
| 
 | |
| 	// Permissions is a slice of extra permissions that may be used for more granular access control.
 | |
| 	//
 | |
| 	// If you only wish to use Gate.Protect and Gate.ProtectFunc, you do not have to worry about this,
 | |
| 	// since they're only used by Gate.ProtectWithPermissions and Gate.ProtectFuncWithPermissions
 | |
| 	Permissions []string
 | |
| }
 | |
| 
 | |
| // NewClient creates a Client with a given token
 | |
| func NewClient(token string) *Client {
 | |
| 	return &Client{
 | |
| 		Token: token,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NewClientWithPermissions creates a Client with a slice of permissions
 | |
| // Equivalent to using NewClient and WithPermissions
 | |
| func NewClientWithPermissions(token string, permissions []string) *Client {
 | |
| 	return NewClient(token).WithPermissions(permissions)
 | |
| }
 | |
| 
 | |
| // WithPermissions adds a slice of permissions to a client
 | |
| func (client *Client) WithPermissions(permissions []string) *Client {
 | |
| 	client.Permissions = append(client.Permissions, permissions...)
 | |
| 	return client
 | |
| }
 | |
| 
 | |
| // WithPermission adds a permission to a client
 | |
| func (client *Client) WithPermission(permission string) *Client {
 | |
| 	client.Permissions = append(client.Permissions, permission)
 | |
| 	return client
 | |
| }
 | |
| 
 | |
| // HasPermission checks whether a client has a given permission
 | |
| func (client Client) HasPermission(permissionRequired string) bool {
 | |
| 	for _, permission := range client.Permissions {
 | |
| 		if permissionRequired == permission {
 | |
| 			return true
 | |
| 		}
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // HasPermissions checks whether a client has the all permissions passed
 | |
| func (client Client) HasPermissions(permissionsRequired []string) bool {
 | |
| 	for _, permissionRequired := range permissionsRequired {
 | |
| 		if !client.HasPermission(permissionRequired) {
 | |
| 			return false
 | |
| 		}
 | |
| 	}
 | |
| 	return true
 | |
| }
 |