package domain type Role string const ( RoleSuperAdmin Role = "SUPER_ADMIN" RoleAdmin Role = "ADMIN" RoleStudent Role = "STUDENT" // RoleOpenLearner can consume LMS content like a learner but without sequential prerequisite locking (step-by-step gates). RoleOpenLearner Role = "OPEN_LEARNER" RoleInstructor Role = "INSTRUCTOR" RoleSupport Role = "SUPPORT" ) func (r Role) IsValid() bool { switch r { case RoleSuperAdmin, RoleAdmin, RoleStudent, RoleOpenLearner, RoleInstructor, RoleSupport: return true default: return false } } // UsesLMSSequentialGating is true when LMS APIs apply sequential prerequisite locks (403 when blocked). func (r Role) UsesLMSSequentialGating() bool { return r == RoleStudent } // RequiresSubscription is true when paid subscription is required to access learning content. func (r Role) RequiresSubscription() bool { return r == RoleStudent } // IsCustomerLearnerRole is true for platform roles that sign in as customers and consume learner-facing LMS APIs. func (r Role) IsCustomerLearnerRole() bool { return r == RoleStudent || r == RoleOpenLearner } func (r Role) Value() string { return string(r) }