37 rindas
914 B
Go
37 rindas
914 B
Go
package auth
|
|
|
|
import "encoding/json"
|
|
|
|
// PrivLevel represents a user account's privilege level.
|
|
type PrivLevel uint8
|
|
|
|
const (
|
|
// LevelBanned represents a user that is forbidden to login.
|
|
LevelBanned PrivLevel = iota
|
|
// Default represents a normal user.
|
|
Default
|
|
// Operator represents a moderator with extra privileges.
|
|
Operator
|
|
// Admin represents a user with all possible privileges.
|
|
Admin
|
|
)
|
|
|
|
// SetPrivLevel sets the privilege level of a user.
|
|
func (users *UserDB) SetPrivLevel(user *RegisteredUser, level PrivLevel) error {
|
|
users.mu.Lock()
|
|
defer users.mu.Unlock()
|
|
user.Privs = level
|
|
userJSON, err := json.Marshal(user)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return users.DB.Put(uint32ToBytes(user.ID), userJSON)
|
|
}
|
|
|
|
// GetPrivs retrieves the privilege level of the given user
|
|
func (users *UserDB) GetPrivs(user *RegisteredUser) PrivLevel {
|
|
users.mu.RLock()
|
|
defer users.mu.RUnlock()
|
|
return user.Privs
|
|
}
|