@@ -1253,6 +1253,98 @@ int whTest_AuthSetPermissions(whClientContext* client)
12531253 WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_NOTFOUND ||
12541254 server_rc != WH_ERROR_OK );
12551255
1256+ /* Test 3b: Non-admin user trying to change another user's permissions */
1257+ WH_TEST_PRINT (" Test: Non-admin user setting another user's perms\n" );
1258+ {
1259+ whUserId nonadmin_id = WH_USER_ID_INVALID ;
1260+ whUserId target_id = WH_USER_ID_INVALID ;
1261+ whAuthPermissions nonadmin_perms ;
1262+ whAuthPermissions target_perms ;
1263+
1264+ /* non-admin user allowed the set permissions action */
1265+ memset (& nonadmin_perms , 0 , sizeof (nonadmin_perms ));
1266+ WH_AUTH_SET_ALLOWED_GROUP (nonadmin_perms , WH_MESSAGE_GROUP_AUTH );
1267+ WH_AUTH_SET_ALLOWED_ACTION (nonadmin_perms , WH_MESSAGE_GROUP_AUTH ,
1268+ WH_MESSAGE_AUTH_ACTION_USER_SET_PERMISSIONS );
1269+ WH_AUTH_SET_IS_ADMIN (nonadmin_perms , 0 );
1270+
1271+ server_rc = 0 ;
1272+ WH_TEST_RETURN_ON_FAIL (_whTest_Auth_UserAddOp (
1273+ client , "sp_nonadmin" , nonadmin_perms , WH_AUTH_METHOD_PIN , "pass" ,
1274+ 4 , & server_rc , & nonadmin_id ));
1275+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
1276+ WH_TEST_ASSERT_RETURN (nonadmin_id != WH_USER_ID_INVALID );
1277+
1278+ /* Target user with no permissions */
1279+ memset (& target_perms , 0 , sizeof (target_perms ));
1280+ server_rc = 0 ;
1281+ WH_TEST_RETURN_ON_FAIL (_whTest_Auth_UserAddOp (
1282+ client , "sp_target" , target_perms , WH_AUTH_METHOD_PIN , "pass" , 4 ,
1283+ & server_rc , & target_id ));
1284+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
1285+ WH_TEST_ASSERT_RETURN (target_id != WH_USER_ID_INVALID );
1286+
1287+ /* Logout admin and login as the non-admin user */
1288+ server_rc = 0 ;
1289+ _whTest_Auth_LogoutOp (client , admin_id , & server_rc );
1290+
1291+ server_rc = 0 ;
1292+ WH_TEST_RETURN_ON_FAIL (_whTest_Auth_LoginOp (client , WH_AUTH_METHOD_PIN ,
1293+ "sp_nonadmin" , "pass" , 4 ,
1294+ & server_rc , & nonadmin_id ));
1295+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
1296+
1297+ /* Attempt to grant the target user admin - should be denied */
1298+ memset (& new_perms , 0 , sizeof (new_perms ));
1299+ WH_AUTH_SET_IS_ADMIN (new_perms , 1 );
1300+ server_rc = 0 ;
1301+ WH_TEST_RETURN_ON_FAIL (
1302+ _whTest_Auth_UserSetPermsOp (client , target_id , new_perms ,
1303+ & server_rc ));
1304+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_ACCESS );
1305+
1306+ /* Attempt to grant self admin - should also be denied */
1307+ server_rc = 0 ;
1308+ WH_TEST_RETURN_ON_FAIL (
1309+ _whTest_Auth_UserSetPermsOp (client , nonadmin_id , new_perms ,
1310+ & server_rc ));
1311+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_ACCESS );
1312+ WH_TEST_PRINT (" Non-admin set permissions attempt correctly denied\n" );
1313+
1314+ /* Logout non-admin and login as admin to verify and cleanup */
1315+ server_rc = 0 ;
1316+ _whTest_Auth_LogoutOp (client , nonadmin_id , & server_rc );
1317+
1318+ server_rc = 0 ;
1319+ WH_TEST_RETURN_ON_FAIL (_whTest_Auth_LoginOp (client , WH_AUTH_METHOD_PIN ,
1320+ "admin" , "1234" , 4 ,
1321+ & server_rc , & admin_id ));
1322+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
1323+
1324+ /* Target permissions must be unchanged */
1325+ memset (& fetched_perms , 0 , sizeof (fetched_perms ));
1326+ fetched_user_id = WH_USER_ID_INVALID ;
1327+ get_rc = 0 ;
1328+ WH_TEST_RETURN_ON_FAIL (_whTest_Auth_UserGetOp (
1329+ client , "sp_target" , & get_rc , & fetched_user_id , & fetched_perms ));
1330+ WH_TEST_ASSERT_RETURN (get_rc == WH_ERROR_OK );
1331+ WH_TEST_ASSERT_RETURN (fetched_user_id == target_id );
1332+ WH_TEST_ASSERT_RETURN (!WH_AUTH_IS_ADMIN (fetched_perms ));
1333+
1334+ /* Non-admin's own permissions must be unchanged as well */
1335+ memset (& fetched_perms , 0 , sizeof (fetched_perms ));
1336+ fetched_user_id = WH_USER_ID_INVALID ;
1337+ get_rc = 0 ;
1338+ WH_TEST_RETURN_ON_FAIL (_whTest_Auth_UserGetOp (
1339+ client , "sp_nonadmin" , & get_rc , & fetched_user_id , & fetched_perms ));
1340+ WH_TEST_ASSERT_RETURN (get_rc == WH_ERROR_OK );
1341+ WH_TEST_ASSERT_RETURN (!WH_AUTH_IS_ADMIN (fetched_perms ));
1342+
1343+ server_rc = 0 ;
1344+ _whTest_Auth_UserDeleteOp (client , nonadmin_id , & server_rc );
1345+ _whTest_Auth_UserDeleteOp (client , target_id , & server_rc );
1346+ }
1347+
12561348 /* Test 4: Set user permissions when not logged in */
12571349 WH_TEST_PRINT (" Test: Set user permissions when not logged in\n" );
12581350 /* Logout */
0 commit comments