go-quasar-partial-ssr/backend/internal/auth/roles.go

98 lines
2.2 KiB
Go

package auth
import (
"server/internal/responses"
"github.com/gofiber/fiber/v3"
)
/* const (
"superadmin" = SuperAdminPermission
"admin" = AdminPermission
"manager" = ManagerPermission
"content_creator" = ContentCreatorPermission
"user" = UserPermission
"guest" = GuestPermission
) */
type Role struct {
Name Permission `json:"name"`
Permission int `json:"permission"`
}
var Roles = []Role{
{"superadmin", SuperAdminPermission},
{"admin", AdminPermission},
{"manager", ManagerPermission},
{"content_creator", ContentCreatorPermission},
{"user", UserPermission},
{"guest", GuestPermission},
}
// Typescript: type
type Permission string
// Typescript: enum=EnumPermission
const (
RoleSuperAdmin Permission = "superadmin"
RoleAdmin Permission = "admin"
RoleManager Permission = "manager"
RoleContentCreator Permission = "content_creator"
RoleUser Permission = "user"
RoleGuest Permission = "guest"
)
type Permissions struct {
SuperAdmin Permission `json:"superadmin"`
Admin Permission `json:"admin"`
Manager Permission `json:"manager"`
ContentCreator Permission `json:"content_creator"`
User Permission `json:"user"`
Guest Permission `json:"guest"`
}
const (
SuperAdminPermission = 0b1111111111111111
AdminPermission = 0b0111111111111111
ManagerPermission = 0b0010111111111111
ContentCreatorPermission = 0b0001111111111111
UserPermission = 0b0000000000000011
GuestPermission = 0b0000000000000001
)
type AllRoles struct {
Roles map[string]string `json:"roles"`
}
func GetRoles(c fiber.Ctx) error {
a := AllRoles{
Roles: make(map[string]string),
}
a.Roles["RoleSuperAdmin"] = "superadmin"
a.Roles["RoleAdmin"] = "admin"
a.Roles["RoleManager"] = "manager"
a.Roles["RoleContentCreator"] = "content_creator"
a.Roles["RoleUser"] = "user"
a.Roles["RoleGuest"] = "guest"
return c.JSON(responses.Success(a))
}
func PermissionToString(p int) Permission {
for _, role := range Roles {
if role.Permission == p {
return role.Name
}
}
return "unknown"
}
func RoleToPermission(s Permission) int {
for _, role := range Roles {
if role.Name == s {
return role.Permission
}
}
return 0
}