Files
JS/07_js-debug/uebungen/u04_dry-benutzerzugang/index.html
T
2026-11-02 14:13:12 +01:00

262 lines
9.6 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.css" />
<title>Übung 4: Benutzerzugang verwalten</title>
</head>
<body>
<main>
<div class="container py-5">
<h1>Advanced If-Else Statements (Enhanced Nesting)</h1>
<hr />
<div class="alert alert-primary">
<h2>Übung 4: Benutzerzugang verwalten</h2>
<p>
In dieser Übung ist es deine Aufgabe, den folgenden Code zu vereinfachen und dabei alle Techniken und
Prinzipien anzuwenden, die du bisher gelernt hast. Der vorgegebene Code simuliert ein
Benutzerverwaltungssystem mit verschiedenen Berechtigungen und Zuständen. Dein Ziel ist es, die Funktion
<code>manageUserAccess</code> zu überarbeiten, um die Logik sauberer und lesbarer zu machen, indem du die
Komplexität der verschachtelten Bedingungen reduzierst.
</p>
</div>
</div>
</main>
<script>
'use strict';
let isSystemUnderMaintenance = false;
let isUserAuthenticated = true;
let userRole = 'editor'; // Possible roles: 'admin', 'editor', 'viewer'
let hasPremiumAccess = false;
let hasTwoFactorAuth = true;
let accountStatus = 'active'; // Possible statuses: 'active', 'suspended', 'closed'
let userDepartment = 'marketing'; // Possible departments: 'engineering', 'marketing', 'sales'
const userActions = [
{
action: 'viewDashboard',
requiresAdmin: false,
requiresPremium: false,
allowedDepartments: ['engineering', 'marketing', 'sales'],
},
{
action: 'editContent',
requiresAdmin: false,
requiresPremium: true,
allowedDepartments: ['marketing'],
},
{
action: 'manageUsers',
requiresAdmin: true,
requiresPremium: false,
allowedDepartments: ['engineering'],
},
{
action: 'accessAnalytics',
requiresAdmin: true,
requiresPremium: true,
allowedDepartments: ['sales', 'marketing'],
},
{
action: 'deployCode',
requiresAdmin: true,
requiresPremium: true,
allowedDepartments: ['engineering'],
},
];
function manageUserAccess() {
if (isSystemUnderMaintenance) {
console.log('System is under maintenance. Please try again later.');
return;
}
if (!isUserAuthenticated) {
console.log('User is not authenticated. Redirecting to login page.');
return;
}
if (accountStatus !== 'active') {
if (accountStatus === 'suspended') {
console.log('Account is suspended. Contact support.');
} else if (accountStatus === 'closed') {
console.log('Account is closed. Access denied.');
} else {
console.log('Unknown account status.');
}
return;
}
if (!hasTwoFactorAuth) {
console.log('Two-Factor Authentication is required for access.');
return;
}
if (userRole === 'admin') {
if (userDepartment === 'engineering') {
userActions.forEach((action) => {
if (action.allowedDepartments.includes(userDepartment)) {
console.log(`Admin (${userDepartment}) accessing: ${action.action}`);
}
});
} else if (userDepartment === 'marketing') {
userActions.forEach((action) => {
if (action.allowedDepartments.includes(userDepartment)) {
console.log(`Admin (${userDepartment}) accessing: ${action.action}`);
}
});
} else if (userDepartment === 'sales') {
userActions.forEach((action) => {
if (action.allowedDepartments.includes(userDepartment)) {
console.log(`Admin (${userDepartment}) accessing: ${action.action}`);
}
});
} else {
console.log('Unknown department. Access denied.');
}
} else if (userRole === 'editor') {
if (!hasPremiumAccess) {
console.log('Premium access required to edit content.');
return;
}
if (userDepartment === 'marketing') {
userActions.forEach((action) => {
if (action.requiresPremium && action.allowedDepartments.includes(userDepartment)) {
console.log(`Editor (${userDepartment}) accessing: ${action.action}`);
}
});
} else {
console.log('Editors are only allowed in the Marketing department.');
return;
}
} else if (userRole === 'viewer') {
if (userDepartment === 'sales') {
userActions.forEach((action) => {
if (
!action.requiresAdmin &&
!action.requiresPremium &&
action.allowedDepartments.includes(userDepartment)
) {
console.log(`Viewer (${userDepartment}) accessing: ${action.action}`);
}
});
} else {
console.log('Viewers are only allowed in the Sales department.');
return;
}
} else {
console.log('Unknown user role. Access denied.');
}
}
// ===== TEST CASES =====
// Test Case 1: System Under Maintenance
console.warn('Test Case 1: System Under Maintenance');
isSystemUnderMaintenance = true;
manageUserAccess(); // => "System is under maintenance. Please try again later."
resetVariables();
// Test Case 2: User Not Authenticated
console.warn('Test Case 2: User Not Authenticated');
isSystemUnderMaintenance = false;
isUserAuthenticated = false;
manageUserAccess(); // => "User is not authenticated. Redirecting to login page."
resetVariables();
// Test Case 3: Account Suspended
console.warn('Test Case 3: Account Suspended');
hasTwoFactorAuth = false;
accountStatus = 'suspended';
manageUserAccess(); // => "Account is suspended. Contact support."
resetVariables();
// Test Case 4: Missing Two-Factor Authentication
console.warn('Test Case 4: Missing Two-Factor Authentication');
hasTwoFactorAuth = false;
accountStatus = 'active';
manageUserAccess(); // => "Two-Factor Authentication is required for access."
resetVariables();
// Test Case 5: Admin Access in Marketing Department
console.warn('Test Case 5: Admin Access in Marketing Department');
userRole = 'admin';
userDepartment = 'marketing';
manageUserAccess();
// Expected Output:
// "Admin (marketing) accessing: viewDashboard"
// "Admin (marketing) accessing: editContent"
// "Admin (marketing) accessing: accessAnalytics"
resetVariables();
// Test Case 6: Editor Without Premium Access
console.warn('Test Case 6: Editor Without Premium Access');
userRole = 'editor';
hasPremiumAccess = false;
manageUserAccess(); // => "Premium access required to edit content."
resetVariables();
// Test Case 7: Editor With Premium Access in Marketing Department
console.warn('Test Case 7: Editor With Premium Access in Marketing Department');
hasPremiumAccess = true;
manageUserAccess();
// Expected Output:
// "Editor (marketing) accessing: editContent"
// "Editor (marketing) accessing: accessAnalytics"
resetVariables();
// Test Case 8: Viewer Access in Sales Department
console.warn('Test Case 8: Viewer Access in Sales Department');
userRole = 'viewer';
userDepartment = 'sales';
manageUserAccess(); // => "Viewer (sales) accessing: viewDashboard"
resetVariables();
// Test Case 9: Unknown User Role
console.warn('Test Case 9: Unknown User Role');
userRole = 'guest';
manageUserAccess(); // => "Unknown user role. Access denied."
resetVariables();
// Test Case 10: Viewer Access in Marketing Department
console.warn('Test Case 10: Viewer Access in Marketing Department');
userRole = 'viewer';
userDepartment = 'marketing';
manageUserAccess(); // => "Viewers are only allowed in the Sales department."
resetVariables();
// Test Case 11: Admin Access in Engineering Department
console.warn('Test Case 11: Admin Access in Engineering Department');
userRole = 'admin';
userDepartment = 'engineering';
manageUserAccess();
// Expected Output:
// "Admin (engineering) accessing: viewDashboard"
// "Admin (engineering) accessing: manageUsers"
// "Admin (engineering) accessing: deployCode"
resetVariables();
// Test Case 12: Editor With Premium Access in Engineering Department
console.warn('Test Case 12: Editor With Premium Access in Engineering Department');
userRole = 'editor';
hasPremiumAccess = true;
userDepartment = 'engineering';
manageUserAccess(); // => "Editors are only allowed in the Marketing department."
resetVariables();
// ===== HELPER FUNCTION =====
function resetVariables() {
isSystemUnderMaintenance = false;
isUserAuthenticated = true;
userRole = 'editor';
hasPremiumAccess = false;
hasTwoFactorAuth = true;
accountStatus = 'active';
userDepartment = 'marketing';
}
</script>
</body>
</html>