78 lines
1.4 KiB
Go
78 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type User struct {
|
|
ID int
|
|
Username string
|
|
Email string
|
|
Active bool
|
|
}
|
|
|
|
func NewUser(id int, username, email string) *User {
|
|
return &User{
|
|
ID: id,
|
|
Username: username,
|
|
Email: email,
|
|
Active: true,
|
|
}
|
|
}
|
|
|
|
func (u User) Info() string {
|
|
return fmt.Sprintf("User #%d: %s <%s> (Aktiv: %t)", u.ID, u.Username, u.Email, u.Active)
|
|
}
|
|
|
|
func (u *User) Deactivate() {
|
|
if u != nil {
|
|
u.Active = false
|
|
}
|
|
}
|
|
|
|
func (u *User) UpdateEmail(newEmail string) {
|
|
if u != nil && newEmail != "" {
|
|
u.Email = newEmail
|
|
}
|
|
}
|
|
|
|
type AdminUser struct {
|
|
User
|
|
Role string
|
|
SuperAdmin bool
|
|
}
|
|
|
|
func NewAdminUser(id int, username, email, role string, superAdmin bool) *AdminUser {
|
|
return &AdminUser{
|
|
User: User{
|
|
ID: id,
|
|
Username: username,
|
|
Email: email,
|
|
Active: true,
|
|
},
|
|
Role: role,
|
|
SuperAdmin: superAdmin,
|
|
}
|
|
}
|
|
|
|
func (a *AdminUser) Permissions() []string {
|
|
if a != nil && a.SuperAdmin {
|
|
return []string{"READ", "WRITE", "DELETE", "ADMIN"}
|
|
}
|
|
return []string{"READ", "WRITE"}
|
|
}
|
|
|
|
func main() {
|
|
u := NewUser(1, "gopher", "gopher@golang.org")
|
|
if u != nil {
|
|
fmt.Println(u.Info())
|
|
u.UpdateEmail("dev@golang.org")
|
|
u.Deactivate()
|
|
fmt.Println("Nach Update:", u.Info())
|
|
}
|
|
|
|
admin := NewAdminUser(2, "admin_alice", "alice@cloud.io", "DevOpsLead", true)
|
|
if admin != nil {
|
|
fmt.Printf("Admin: %s, Rolle: %s, Rechte: %v\n", admin.Username, admin.Role, admin.Permissions())
|
|
}
|
|
}
|