274 lines
9.4 KiB
HTML
274 lines
9.4 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 isAccountStatusViable() {
|
|
const statusMessages = {
|
|
suspended: 'Account is suspended. Contact support.',
|
|
closed: 'Account is closed. Access denied.',
|
|
};
|
|
|
|
if (accountStatus !== 'active') {
|
|
console.log(statusMessages[accountStatus] || 'Unknown account status.');
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function isRole(role) {
|
|
return userRole === role;
|
|
}
|
|
|
|
function isDepartment(department) {
|
|
return userDepartment === department;
|
|
}
|
|
|
|
function logAccess(userType, options = {}) {
|
|
const { blRequirePremium = null, blRequiresAdmin = null } = options;
|
|
console.log(userType, options);
|
|
|
|
userActions.forEach((userAction) => {
|
|
const { requiresPremium, requiresAdmin, action } = userAction;
|
|
|
|
if ((blRequirePremium === false && requiresPremium) || (blRequirePremium && !requiresPremium)) {
|
|
return;
|
|
}
|
|
|
|
if ((blRequiresAdmin === false && requiresAdmin) || (blRequiresAdmin && !requiresAdmin)) {
|
|
return;
|
|
}
|
|
|
|
if (allowedDepartments.includes(userDepartment)) {
|
|
console.log(`${userType} (${userDepartment}) accessing: ${action}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
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 (!isAccountStatusViable()) {
|
|
return;
|
|
}
|
|
|
|
if (!hasTwoFactorAuth) {
|
|
console.log('Two-Factor Authentication is required for access.');
|
|
return;
|
|
}
|
|
|
|
if (isRole('admin')) {
|
|
if (isDepartment('engineering') || isDepartment('marketing') || isDepartment('sales')) {
|
|
logAccess('Admin');
|
|
} else {
|
|
console.log('Unknown department. Access denied.');
|
|
}
|
|
} else if (isRole('editor')) {
|
|
if (!hasPremiumAccess) {
|
|
console.log('Premium access required to edit content.');
|
|
return;
|
|
}
|
|
if (isDepartment('marketing')) {
|
|
logAccess('Editor', { blRequirePremium: true });
|
|
} else {
|
|
console.log('Editors are only allowed in the Marketing department.');
|
|
return;
|
|
}
|
|
} else if (isRole('viewer')) {
|
|
if (isDepartment('sales')) {
|
|
logAccess('Viewer', {
|
|
blRequirePremium: false,
|
|
blRequiresAdmin: false,
|
|
});
|
|
} 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>
|