You need to design a programming module PERMISSIONS that would allow Caller to Grant a permission to a User.
Check if a User has a particular Permission.
Caller is an external system that uses our module (particularly it calls our API).
Permission is a user right to take an action or access a resource.
Permissions for resource access can be READ or WRITE.
For example, Caller can grant a permission ”reboot the server” (an example of action) OR write to a file “C:/readme.txt” (an example of resource) to a user Andrew.
Caller can grant Permissions directly to a User OR via Roles.
If Caller wants to grant Oermissions via Roles then Caller needs to register a Role, grant Permissions to the Role and then assign the Role to a User.
Caller can assign many Roles to a User.
As a note, our module (you are designing) doesn’t provide any dictionaries to Caller.
All objects (including Users) are created / managed by Caller. Our module provides ONLY functionality.
NOTE: You don’t have to strictly use a specific programming language for the exercise.
You can use just a meta syntax that would give us an idea of your solution - we’re not going to compile it for sure :).
We would expect you to write module API (a list of functions with parameters) and design a database for the module.
A list of functions can look like this:
function AddEmployee(company, first_name, last_name, age): boolean;
function AddJob(company, first_name, last_name, age): boolean;
function IsEmployeeFired(employeeId): boolean;
...
If you want to pass an object as a parameter you can describe an object separately:
Class Company {
String name;
String address;
Integer taxId;
}
Database design can be presented as a list of tables with most important fields (no need to define indexes, etc).
For example,
Table Companies {
Id,
Name,
Address,
TaxId
}
Table Employees {
Id,
CompanyId, // this is a foreign key to Company
FirstName,
LastName,
Job
}