initial commit, adding SQL connection and a simple testing on main
This commit is contained in:
124
app/libs/database/schemas/rbac/rbac.go
Normal file
124
app/libs/database/schemas/rbac/rbac.go
Normal file
@@ -0,0 +1,124 @@
|
||||
/**
|
||||
* @file schema.rbac.go
|
||||
* @brief RBAC schema models for GORM
|
||||
*
|
||||
* This file defines the base database models used by the RBAC
|
||||
* (Role-Based Access Control) system. Models map to the following
|
||||
* tables: user_types, users, auth_identities, auth_credentials,
|
||||
* roles, permissions, role_permissions and user_roles.
|
||||
*
|
||||
* The structs include GORM tags for column names and relationships:
|
||||
* - UserType: types of users.
|
||||
* - User: main user record; links to UserType, AuthIdentity and UserRole.
|
||||
* - AuthIdentity: external identity providers; links to AuthCredential.
|
||||
* - AuthCredential: stored credentials for an identity.
|
||||
* - Role: role definitions and their permissions and assigned users.
|
||||
* - Permission: permission definitions.
|
||||
* - RolePermission: join table between Role and Permission.
|
||||
* - UserRole: join table between User and Role with optional expiration.
|
||||
*
|
||||
* These models are intended for use with GORM to perform ORM operations
|
||||
* against the RBAC schema.
|
||||
*/
|
||||
|
||||
package rbac
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type UserType struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
Name string `gorm:"type:text;column:name"`
|
||||
Description *string `gorm:"type:text;column:description"`
|
||||
}
|
||||
|
||||
func (UserType) TableName() string { return "user_types" }
|
||||
|
||||
type User struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
UserTypeID uint `gorm:"column:user_type"`
|
||||
Name string `gorm:"type:text;column:name"`
|
||||
LastName string `gorm:"type:text;column:last_name"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime"`
|
||||
|
||||
UserType UserType `gorm:"foreignKey:UserTypeID;references:ID"`
|
||||
AuthIdentities []AuthIdentity `gorm:"foreignKey:UserID;references:ID"`
|
||||
UserRoles []UserRole `gorm:"foreignKey:UserID;references:ID"`
|
||||
}
|
||||
|
||||
func (User) TableName() string { return "users" }
|
||||
|
||||
type AuthIdentity struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
UserID uint `gorm:"column:user_id"`
|
||||
Provider string `gorm:"type:text;column:provider"`
|
||||
Identifier string `gorm:"type:text;column:identifier"`
|
||||
IsPrimary bool `gorm:"column:is_primary"`
|
||||
IsVerified bool `gorm:"column:is_verified"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime"`
|
||||
|
||||
User User `gorm:"foreignKey:UserID;references:ID"`
|
||||
Credentials []AuthCredential `gorm:"foreignKey:IdentityID;references:ID"`
|
||||
}
|
||||
|
||||
func (AuthIdentity) TableName() string { return "auth_identities" }
|
||||
|
||||
type AuthCredential struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
IdentityID uint `gorm:"column:identity_id"`
|
||||
Password string `gorm:"type:text;column:password"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime"`
|
||||
|
||||
Identity AuthIdentity `gorm:"foreignKey:IdentityID;references:ID"`
|
||||
}
|
||||
|
||||
func (AuthCredential) TableName() string { return "auth_credentials" }
|
||||
|
||||
type Role struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
Name string `gorm:"type:text;column:name"`
|
||||
Description *string `gorm:"type:text;column:description"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime"`
|
||||
RolePermissions []RolePermission `gorm:"foreignKey:RoleID;references:ID"`
|
||||
UserRoles []UserRole `gorm:"foreignKey:RoleID;references:ID"`
|
||||
}
|
||||
|
||||
func (Role) TableName() string { return "roles" }
|
||||
|
||||
type Permission struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
Name string `gorm:"type:text;column:name"`
|
||||
Description *string `gorm:"type:text;column:description"`
|
||||
RolePermissions []RolePermission `gorm:"foreignKey:PermissionID;references:ID"`
|
||||
}
|
||||
|
||||
func (Permission) TableName() string { return "permissions" }
|
||||
|
||||
type RolePermission struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
RoleID uint `gorm:"column:role_id"`
|
||||
PermissionID uint `gorm:"column:permission_id"`
|
||||
|
||||
Role Role `gorm:"foreignKey:RoleID;references:ID"`
|
||||
Permission Permission `gorm:"foreignKey:PermissionID;references:ID"`
|
||||
}
|
||||
|
||||
func (RolePermission) TableName() string { return "role_permissions" }
|
||||
|
||||
type UserRole struct {
|
||||
ID uint `gorm:"primaryKey;column:id"`
|
||||
UserID uint `gorm:"column:user_id"`
|
||||
RoleID uint `gorm:"column:role_id"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
|
||||
ExpiresAt *time.Time `gorm:"column:expires_at"`
|
||||
|
||||
User User `gorm:"foreignKey:UserID;references:ID"`
|
||||
Role Role `gorm:"foreignKey:RoleID;references:ID"`
|
||||
}
|
||||
|
||||
func (UserRole) TableName() string { return "user_roles" }
|
||||
Reference in New Issue
Block a user