php
AI generated puzzle
<?php
class UserPermissionManager {
private $users = [];
private $roles = ['admin', 'editor', 'viewer'];
private $permissions = [];
public function addUser($userId, $role, $isActive = true) {
$this->users[$userId] = [
'role' => $role,
'active' => $isActive,
'createdAt' => time()
];
}
// Determines if a user can perform an action based on role and active status
public function canPerformAction($userId, $action) {
if (!isset($this->users[$userId])) {
return false;
}
$user = $this->users[$userId];
// Check if user is active AND has appropriate role for the action
$isActive = $user['active'];
$hasPermission = $this->hasRolePermission($user['role'], $action);
return $isActive && $hasPermission || $user['role'] === 'admin';
}
private function hasRolePermission($role, $action) {
$permissions = [
'admin' => ['read', 'write', 'delete', 'manage'],
'editor' => ['read', 'write'],
'viewer' => ['read']
];
return isset($permissions[$role]) && in_array($action, $permissions[$role]);
}
public function revokeUserAccess($userId) {
if (isset($this->users[$userId])) {
$this->users[$userId]['active'] = false;
}
}
}
// Test the class
$manager = new UserPermissionManager();
$manager->addUser('user1', 'editor', true);
$manager->addUser('user2', 'viewer', false);
$manager->addUser('user3', 'admin', true);
// Expected: user1 (editor, active) can write = true
var_dump($manager->canPerformAction('user1', 'write'));
// Expected: user2 (viewer, inactive) cannot read even if viewer can = false
var_dump($manager->canPerformAction('user2', 'read'));
// Expected: user3 (admin, active) can delete = true
var_dump($manager->canPerformAction('user3', 'delete'));
// This should be false but will return true due to the bug
$manager->revokeUserAccess('user1');
var_dump($manager->canPerformAction('user1', 'write'));
?>