File permissions and access control in Cybersecurity - Time & Space Complexity
When checking file permissions and access control, the system must verify who can do what with a file.
We want to understand how the time to check permissions grows as the number of users or rules increases.
Analyze the time complexity of the following code snippet.
// Simplified permission check
function checkAccess(user, file) {
for (let rule of file.accessRules) {
if (rule.user === user) {
return rule.permission;
}
}
return 'no access';
}
This code checks each access rule for a file to find if the user has permission.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the list of access rules for the file.
- How many times: Up to the number of rules, until a match is found or all rules are checked.
As the number of access rules grows, the time to check permissions grows roughly the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 checks |
| 100 | Up to 100 checks |
| 1000 | Up to 1000 checks |
Pattern observation: The time grows directly with the number of rules; doubling rules roughly doubles the checks.
Time Complexity: O(n)
This means the time to check permissions grows linearly with the number of access rules.
[X] Wrong: "Checking permissions is always instant regardless of rules."
[OK] Correct: The system must look through rules one by one, so more rules mean more time needed.
Understanding how permission checks scale helps you explain system behavior and design efficient access control.
"What if the access rules were stored in a hash map instead of a list? How would the time complexity change?"