MukeshKapoor25 commited on
Commit
7e4a9fd
·
1 Parent(s): ba29303

refactor: update user role handling to use string identifiers instead of enum values

Browse files
app/auth/controllers/router.py CHANGED
@@ -141,20 +141,20 @@ async def login(
141
  headers={"WWW-Authenticate": "Bearer"}
142
  )
143
 
144
- logger.info(f"User authenticated: {user.username}, role: {user.role.value}")
145
 
146
  # Fetch permissions from SCM access roles collection based on user role
147
- scm_permissions = await user_service.get_scm_permissions_by_role(user.role.value)
148
 
149
  if scm_permissions:
150
  logger.info(f"SCM permissions loaded: {list(scm_permissions.keys())}")
151
  else:
152
- logger.warning(f"No SCM permissions found for role: {user.role.value}")
153
 
154
  # Create tokens
155
  access_token_expires = timedelta(minutes=30)
156
  access_token = user_service.create_access_token(
157
- data={"sub": user.user_id, "username": user.username, "role": user.role.value},
158
  expires_delta=access_token_expires
159
  )
160
 
@@ -173,7 +173,7 @@ async def login(
173
  "email": user.email,
174
  "first_name": user.first_name,
175
  "last_name": user.last_name,
176
- "role": user.role.value,
177
  "status": user.status.value,
178
  "last_login_at": user.last_login_at,
179
  "metadata": user.metadata
@@ -243,8 +243,8 @@ async def refresh_token(
243
 
244
  # Create new access token
245
  access_token_expires = timedelta(minutes=30)
246
- access_token = user_service.create_access_token(
247
- data={"sub": user_id, "username": username, "role": user.role.value},
248
  expires_delta=access_token_expires
249
  )
250
 
@@ -277,7 +277,7 @@ async def get_current_user_info(
277
  "email": current_user.email,
278
  "first_name": current_user.first_name,
279
  "last_name": current_user.last_name,
280
- "role": current_user.role.value,
281
  "permissions": current_user.permissions,
282
  "status": current_user.status.value,
283
  "last_login_at": current_user.last_login_at,
 
141
  headers={"WWW-Authenticate": "Bearer"}
142
  )
143
 
144
+ logger.info(f"User authenticated: {user.username}, role: {user.role}")
145
 
146
  # Fetch permissions from SCM access roles collection based on user role
147
+ scm_permissions = await user_service.get_scm_permissions_by_role(user.role)
148
 
149
  if scm_permissions:
150
  logger.info(f"SCM permissions loaded: {list(scm_permissions.keys())}")
151
  else:
152
+ logger.warning(f"No SCM permissions found for role: {user.role}")
153
 
154
  # Create tokens
155
  access_token_expires = timedelta(minutes=30)
156
  access_token = user_service.create_access_token(
157
+ data={"sub": user.user_id, "username": user.username, "role": user.role},
158
  expires_delta=access_token_expires
159
  )
160
 
 
173
  "email": user.email,
174
  "first_name": user.first_name,
175
  "last_name": user.last_name,
176
+ "role": user.role,
177
  "status": user.status.value,
178
  "last_login_at": user.last_login_at,
179
  "metadata": user.metadata
 
243
 
244
  # Create new access token
245
  access_token_expires = timedelta(minutes=30)
246
+ new_access_token = user_service.create_access_token(
247
+ data={"sub": user_id, "username": username, "role": user.role},
248
  expires_delta=access_token_expires
249
  )
250
 
 
277
  "email": current_user.email,
278
  "first_name": current_user.first_name,
279
  "last_name": current_user.last_name,
280
+ "role": current_user.role,
281
  "permissions": current_user.permissions,
282
  "status": current_user.status.value,
283
  "last_login_at": current_user.last_login_at,
app/core/db_init.py CHANGED
@@ -100,8 +100,8 @@ async def create_initial_users(db):
100
  {
101
  "user_id": "usr_superadmin_001",
102
  "username": "superadmin",
103
- "email": "superadmin@cuatrobeauty.com",
104
- "password_hash": pwd_context.hash("SuperAdmin@123"),
105
  "first_name": "Super",
106
  "last_name": "Admin",
107
  "phone": "+919999999999",
@@ -127,8 +127,8 @@ async def create_initial_users(db):
127
  {
128
  "user_id": "usr_admin_001",
129
  "username": "admin",
130
- "email": "admin@cuatrobeauty.com",
131
- "password_hash": pwd_context.hash("CompanyAdmin@123"),
132
  "first_name": "Company",
133
  "last_name": "Admin",
134
  "phone": "+919999999998",
@@ -161,5 +161,5 @@ async def create_initial_users(db):
161
  logger.info(f" ⊳ User exists: {user['email']}")
162
 
163
  logger.info("\n📝 Default Credentials:")
164
- logger.info(" superadmin@cuatrobeauty.com / SuperAdmin@123")
165
- logger.info(" admin@cuatrobeauty.com / CompanyAdmin@123")
 
100
  {
101
  "user_id": "usr_superadmin_001",
102
  "username": "superadmin",
103
+ "email": "superadmin@cuatrolabs.com",
104
+ "password_hash": pwd_context.hash("SuperAdmin@123!"),
105
  "first_name": "Super",
106
  "last_name": "Admin",
107
  "phone": "+919999999999",
 
127
  {
128
  "user_id": "usr_admin_001",
129
  "username": "admin",
130
+ "email": "admin@cuatrolabs.com",
131
+ "password_hash": pwd_context.hash("CompanyAdmin@123!"),
132
  "first_name": "Company",
133
  "last_name": "Admin",
134
  "phone": "+919999999998",
 
161
  logger.info(f" ⊳ User exists: {user['email']}")
162
 
163
  logger.info("\n📝 Default Credentials:")
164
+ logger.info(" superadmin@cuatrolabs.com / SuperAdmin@123")
165
+ logger.info(" admin@cuatrolabs.com / CompanyAdmin@123")
app/dependencies/auth.py CHANGED
@@ -75,7 +75,7 @@ async def require_admin_role(
75
  current_user: SystemUserModel = Depends(get_current_user)
76
  ) -> SystemUserModel:
77
  """Require admin or super_admin role."""
78
- if current_user.role not in [UserRole.ADMIN, UserRole.SUPER_ADMIN]:
79
  raise HTTPException(
80
  status_code=status.HTTP_403_FORBIDDEN,
81
  detail="Admin privileges required"
@@ -87,7 +87,7 @@ async def require_super_admin_role(
87
  current_user: SystemUserModel = Depends(get_current_user)
88
  ) -> SystemUserModel:
89
  """Require super_admin role."""
90
- if current_user.role != UserRole.SUPER_ADMIN:
91
  raise HTTPException(
92
  status_code=status.HTTP_403_FORBIDDEN,
93
  detail="Super admin privileges required"
@@ -101,7 +101,7 @@ def require_permission(permission: str):
101
  current_user: SystemUserModel = Depends(get_current_user)
102
  ) -> SystemUserModel:
103
  if (permission not in current_user.permissions and
104
- current_user.role not in [UserRole.ADMIN, UserRole.SUPER_ADMIN]):
105
  raise HTTPException(
106
  status_code=status.HTTP_403_FORBIDDEN,
107
  detail=f"Permission '{permission}' required"
 
75
  current_user: SystemUserModel = Depends(get_current_user)
76
  ) -> SystemUserModel:
77
  """Require admin or super_admin role."""
78
+ if current_user.role not in ["admin", "super_admin"]:
79
  raise HTTPException(
80
  status_code=status.HTTP_403_FORBIDDEN,
81
  detail="Admin privileges required"
 
87
  current_user: SystemUserModel = Depends(get_current_user)
88
  ) -> SystemUserModel:
89
  """Require super_admin role."""
90
+ if current_user.role != "super_admin":
91
  raise HTTPException(
92
  status_code=status.HTTP_403_FORBIDDEN,
93
  detail="Super admin privileges required"
 
101
  current_user: SystemUserModel = Depends(get_current_user)
102
  ) -> SystemUserModel:
103
  if (permission not in current_user.permissions and
104
+ current_user.role not in ["admin", "super_admin"]):
105
  raise HTTPException(
106
  status_code=status.HTTP_403_FORBIDDEN,
107
  detail=f"Permission '{permission}' required"
app/system_users/controllers/router.py CHANGED
@@ -69,7 +69,7 @@ async def login(
69
  access_token_expires = timedelta(hours=24) # Longer expiry for remember me
70
 
71
  access_token = user_service.create_access_token(
72
- data={"sub": user.user_id, "username": user.username, "role_id": user.role.value},
73
  expires_delta=access_token_expires
74
  )
75
 
 
69
  access_token_expires = timedelta(hours=24) # Longer expiry for remember me
70
 
71
  access_token = user_service.create_access_token(
72
+ data={"sub": user.user_id, "username": user.username, "role_id": user.role},
73
  expires_delta=access_token_expires
74
  )
75
 
app/system_users/models/model.py CHANGED
@@ -64,7 +64,7 @@ class SystemUserModel(BaseModel):
64
  phone: Optional[str] = Field(None, description="User phone number (E.164 format)")
65
 
66
  # Authorization
67
- role_id: UserRole = Field(default=UserRole.USER, description="Primary user role")
68
  permissions: Dict[str, List[str]] = Field(default_factory=dict, description="Grouped permissions by module")
69
 
70
  # Status and security
 
64
  phone: Optional[str] = Field(None, description="User phone number (E.164 format)")
65
 
66
  # Authorization
67
+ role: str = Field(..., description="User role identifier")
68
  permissions: Dict[str, List[str]] = Field(default_factory=dict, description="Grouped permissions by module")
69
 
70
  # Status and security
app/system_users/schemas/schema.py CHANGED
@@ -29,7 +29,7 @@ class UserInfoResponse(BaseModel):
29
  email: str = Field(..., description="Email address")
30
  first_name: str = Field(..., description="First name")
31
  last_name: Optional[str] = Field(None, description="Last name")
32
- role: UserRole = Field(..., description="User role")
33
  permissions: Dict[str, List[str]] = Field(default_factory=dict, description="User permissions")
34
  status: UserStatus = Field(..., description="Account status")
35
  last_login_at: Optional[datetime] = Field(None, description="Last login timestamp")
@@ -44,7 +44,7 @@ class CreateUserRequest(BaseModel):
44
  first_name: str = Field(..., description="First name", min_length=1, max_length=50)
45
  last_name: Optional[str] = Field(None, description="Last name", max_length=50)
46
  phone: Optional[str] = Field(None, description="Phone number")
47
- role: UserRole = Field(default=UserRole.USER, description="User role")
48
  permissions: Dict[str, List[str]] = Field(default_factory=dict, description="Additional permissions")
49
 
50
  @validator('username')
@@ -71,7 +71,7 @@ class UpdateUserRequest(BaseModel):
71
  first_name: Optional[str] = Field(None, description="First name", min_length=1, max_length=50)
72
  last_name: Optional[str] = Field(None, description="Last name", max_length=50)
73
  phone: Optional[str] = Field(None, description="Phone number")
74
- role: Optional[UserRole] = Field(None, description="User role")
75
  permissions: Optional[Dict[str, List[str]]] = Field(None, description="User permissions")
76
  status: Optional[UserStatus] = Field(None, description="Account status")
77
  timezone: Optional[str] = Field(None, description="User timezone")
 
29
  email: str = Field(..., description="Email address")
30
  first_name: str = Field(..., description="First name")
31
  last_name: Optional[str] = Field(None, description="Last name")
32
+ role: str = Field(..., description="User role")
33
  permissions: Dict[str, List[str]] = Field(default_factory=dict, description="User permissions")
34
  status: UserStatus = Field(..., description="Account status")
35
  last_login_at: Optional[datetime] = Field(None, description="Last login timestamp")
 
44
  first_name: str = Field(..., description="First name", min_length=1, max_length=50)
45
  last_name: Optional[str] = Field(None, description="Last name", max_length=50)
46
  phone: Optional[str] = Field(None, description="Phone number")
47
+ role: str = Field(default="user", description="User role")
48
  permissions: Dict[str, List[str]] = Field(default_factory=dict, description="Additional permissions")
49
 
50
  @validator('username')
 
71
  first_name: Optional[str] = Field(None, description="First name", min_length=1, max_length=50)
72
  last_name: Optional[str] = Field(None, description="Last name", max_length=50)
73
  phone: Optional[str] = Field(None, description="Phone number")
74
+ role: Optional[str] = Field(None, description="User role")
75
  permissions: Optional[Dict[str, List[str]]] = Field(None, description="User permissions")
76
  status: Optional[UserStatus] = Field(None, description="Account status")
77
  timezone: Optional[str] = Field(None, description="User timezone")