- Introduce SQLite persistence via GORM (stored at <data>/.ushare.db) - Add Role model with two built-in roles: admin (all perms) and user (upload only) - Add three permissions: user_manage, upload, token_manage (reserved) - Rewrite UserManager: DB-backed login with in-memory session tokens - Auto-seed default roles and admin user on first startup - Add AuthPermission middleware for fine-grained permission checks - Add /api/uauth/me endpoint for current session info - Add /api/admin/* CRUD routes for user and role management - Add admin console page (/admin) with user table and role permissions view - Show admin console link in share page for users with user_manage permission 🤖 Generated with [Qoder][https://qoder.com]
45 lines
894 B
Go
45 lines
894 B
Go
package model
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
PermUserManage = "user_manage"
|
|
PermUpload = "upload"
|
|
PermTokenManage = "token_manage"
|
|
|
|
RoleAdmin = "admin"
|
|
RoleUser = "user"
|
|
)
|
|
|
|
type Role struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
Name string `gorm:"uniqueIndex;not null" json:"name"`
|
|
Label string `gorm:"not null" json:"label"`
|
|
Permissions string `gorm:"not null" json:"permissions"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
func (r *Role) HasPermission(perm string) bool {
|
|
for _, p := range r.PermissionList() {
|
|
if p == perm {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (r *Role) PermissionList() []string {
|
|
list := make([]string, 0)
|
|
for _, p := range strings.Split(r.Permissions, ",") {
|
|
p = strings.TrimSpace(p)
|
|
if p != "" {
|
|
list = append(list, p)
|
|
}
|
|
}
|
|
return list
|
|
}
|