package infrastructure import ( "context" "mengstack/internal/modules/rbac/domain" "gorm.io/gorm" ) type userRoleRepo struct { db *gorm.DB } func NewUserRoleRepository(db *gorm.DB) domain.UserRoleRepository { return &userRoleRepo{db: db} } func (r *userRoleRepo) Assign(ctx context.Context, ur *domain.UserRole) error { return r.db.WithContext(ctx).Create(ur).Error } func (r *userRoleRepo) Remove(ctx context.Context, userID uint, tenantID string, roleID uint) error { return r.db.WithContext(ctx). Where("user_id = ? AND tenant_id = ? AND role_id = ?", userID, tenantID, roleID). Delete(&domain.UserRole{}).Error } func (r *userRoleRepo) FindByUser(ctx context.Context, userID uint, tenantID string) ([]domain.UserRole, error) { var urs []domain.UserRole err := r.db.WithContext(ctx). Where("user_id = ? AND tenant_id = ?", userID, tenantID). Find(&urs).Error return urs, err } func (r *userRoleRepo) FindRolesByUser(ctx context.Context, userID uint, tenantID string) ([]domain.Role, error) { var roles []domain.Role err := r.db.WithContext(ctx). Joins("JOIN user_roles ON user_roles.role_id = roles.id"). Where("user_roles.user_id = ? AND user_roles.tenant_id = ?", userID, tenantID). Preload("Permissions"). Find(&roles).Error return roles, err }