User Privileges

\[ \begin{align}\begin{aligned}\newcommand\blank{~\underline{\hspace{1.2cm}}~}\\% Bold symbols (vectors) \newcommand\bs[1]{\mathbf{#1}}\\% Poor man's siunitx \newcommand\unit[1]{\mathrm{#1}} \newcommand\num[1]{#1} \newcommand\qty[2]{#1~\unit{#2}}\\\newcommand\per{/} \newcommand\squared{{}^2} % % Scale \newcommand\milli{\unit{m}} \newcommand\centi{\unit{c}} \newcommand\kilo{\unit{k}} \newcommand\mega{\unit{M}} % % Angle \newcommand\radian{\unit{rad}} \newcommand\degree{\unit{{}^\circ}} % % Time \newcommand\second{\unit{s}} % % Distance \newcommand\meter{\unit{m}} \newcommand\m{\meter} \newcommand\inch{\unit{in}} \newcommand\feet{\unit{ft}} \newcommand\mile{\unit{mi}} \newcommand\mi{\mile} % % Volume \newcommand\gallon{\unit{gal}} % % Mass \newcommand\gram{\unit{g}} \newcommand\g{\gram} % % Frequency \newcommand\hertz{\unit{Hz}} \newcommand\rpm{\unit{rpm}} % % Voltage \newcommand\volt{\unit{V}} \newcommand\V{\volt} \newcommand\millivolt{\milli\volt} \newcommand\mV{\milli\volt} \newcommand\kilovolt{\kilo\volt} \newcommand\kV{\kilo\volt} % % Current \newcommand\ampere{\unit{A}} \newcommand\A{\ampere} \newcommand\milliampereA{\milli\ampere} \newcommand\mA{\milli\ampere} \newcommand\kiloampereA{\kilo\ampere} \newcommand\kA{\kilo\ampere} % % Resistance \newcommand\ohm{\Omega} \newcommand\milliohm{\milli\ohm} \newcommand\kiloohm{\kilo\ohm} % correct SI spelling \newcommand\kilohm{\kilo\ohm} % "American" spelling used in siunitx \newcommand\megaohm{\mega\ohm} % correct SI spelling \newcommand\megohm{\mega\ohm} % "American" spelling used in siunitx % % Inductance \newcommand\henry{\unit{H}} \newcommand\H{\henry} \newcommand\millihenry{\milli\henry} \newcommand\mH{\milli\henry} % % Temperature \newcommand\celsius{\unit{^{\circ}C}} \newcommand\C{\unit{\celsius}} \newcommand\fahrenheit{\unit{^{\circ}F}} \newcommand\F{\unit{\fahrenheit}} \newcommand\kelvin{\unit{\K}} \newcommand\K{\unit{\kelvin}}\\% Power \newcommand\watt{\unit{W}} \newcommand\W{\watt} \newcommand\milliwatt{\milli\watt} \newcommand\mW{\milli\watt} \newcommand\kilowatt{\kilo\watt} \newcommand\kW{\kilo\watt} % % Torque \newcommand\ozin{\unit{oz}\text{-}\unit{in}} \newcommand\newtonmeter{\unit{N\text{-}m}}\end{aligned}\end{align} \]

Apr 16, 2025 | 270 words | 3 min read

11.2.5. User Privileges#

Instructions#

Write a class named Privileges that has an attribute named privs and methods named grant, revoke, and get_privs. The privs attribute will be a set of strings like interact, post, comment, edit, or ban. If not provided during instantiation of a Privilege instance, the privs attribute should be initialized to have default privileges interact and post. The grant method takes a string parameter. It should then add that string to the set of privs and print a message saying what privilege was granted. The revoke method also takes a string parameter. It should remove that string from the set of privs and print a message saying what privilege was revoked. The get_privs method should return the set of privileges in alphabetical order as a comma separated string (e.g. ban, comment, edit, interact, post).

Next, write a User class. This class should have attributes name, email, and privs, and a method named describe_user. The name and email attributes should be strings that are set during instantiation and the privs attribute should be an instance of the Privileges class. The describe_user function should print a formatted list of all the user’s information.

In the main function of your program, create a User instance with the name Alice and email alice@example.com, then call the user’s describe_user method to display the result. Next grant Alice the teleport privilege and revoke her post privilege, calling describe_user after each change.

Sample Output#

Ensure your program’s output matches the provided samples exactly. This includes all characters, white space, and punctuation. In the samples, user input is highlighted like this for clarity, but your program should not highlight user input in this way.

Sample Output

$ python3 user_privileges_login.py User Profile Name: Alice Email: alice@example.com Privs: interact, post Granted teleport User Profile Name: Alice Email: alice@example.com Privs: interact, post, teleport Revoked post User Profile Name: Alice Email: alice@example.com Privs: interact, teleport

Deliverables#

Save your finished program as user_privileges_login.py, replacing login with your Purdue login. Then submit it along with all the deliverables listed in Table 11.7 below.

Table 11.7 Deliverables#

Deliverable

Description

user_privileges_login.py

Your finished program.

Screenshot(s)

PNG(s) capturing the test case.