37 lines
610 B
Go
37 lines
610 B
Go
|
package auth
|
||
|
|
||
|
import "errors"
|
||
|
|
||
|
// auth is a generic interface to implement password-based authentication and authorization
|
||
|
type Auth interface {
|
||
|
Authenticate(user, pass string) (*User, error)
|
||
|
Authorize(user *User, topic string, perm Permission) error
|
||
|
}
|
||
|
|
||
|
type User struct {
|
||
|
Name string
|
||
|
Role Role
|
||
|
}
|
||
|
|
||
|
type Permission int
|
||
|
|
||
|
const (
|
||
|
PermissionRead = Permission(1)
|
||
|
PermissionWrite = Permission(2)
|
||
|
)
|
||
|
|
||
|
type Role string
|
||
|
|
||
|
const (
|
||
|
RoleAdmin = Role("admin")
|
||
|
RoleUser = Role("user")
|
||
|
RoleNone = Role("none")
|
||
|
)
|
||
|
|
||
|
var Everyone = &User{
|
||
|
Name: "",
|
||
|
Role: RoleNone,
|
||
|
}
|
||
|
|
||
|
var ErrUnauthorized = errors.New("unauthorized")
|