Files
donetick/src/utils/UserHelpers.js

66 lines
1.8 KiB
JavaScript

// User type detection and permission utilities
export const USER_TYPES = {
PARENT: 0,
CHILD: 1,
}
export const isParentUser = (user) => {
if (!user) return false
return user.userType === USER_TYPES.PARENT && !user.parentUserId
}
export const isChildUser = (user) => {
if (!user) return false
return user.userType === USER_TYPES.CHILD && user.parentUserId !== null
}
export const canManageChildUsers = (user) => {
return isParentUser(user)
}
export const canCreateChores = (user) => {
// Both parent and child users can create chores
return user && (isParentUser(user) || isChildUser(user))
}
export const canManageCircle = (user) => {
// Only parent users can manage circle settings
return isParentUser(user)
}
export const canAccessAdminSettings = (user) => {
// Only parent users can access admin settings like API tokens, MFA, etc.
return isParentUser(user)
}
export const getUserDisplayInfo = (user) => {
if (!user) return { displayName: '', username: '', userType: 'unknown' }
return {
displayName: user.displayName || user.username,
username: user.username,
userType: isParentUser(user) ? 'parent' : isChildUser(user) ? 'child' : 'unknown',
parentUserId: user.parentUserId,
circleID: user.circleID,
}
}
export const getChildUsernameFromCombined = (combinedUsername) => {
// Extract child name from format: parent_child
const parts = combinedUsername.split('_')
if (parts.length >= 2) {
return parts.slice(1).join('_') // In case child name contains underscores
}
return combinedUsername
}
export const getParentUsernameFromCombined = (combinedUsername) => {
// Extract parent name from format: parent_child
const parts = combinedUsername.split('_')
return parts[0] || combinedUsername
}
export const buildChildUsername = (parentUsername, childName) => {
return `${parentUsername}_${childName}`
}