Related Bugs:
Operations
LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE CHANGEPERMISSIONS CONTROLPANEL UNSAFECONTENT ADMIN
Current Default Roles
None: LOGIN
Viewer: LOGIN BROWSE READ SUBSCRIBE
Contributor: LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE UNSAFECONTENT
Manager: LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE UNSAFECONTENT CHANGEPERMISSIONS
Current Default Restrictions
public allows: LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE CHANGEPERMISSIONS
semi-public allows: LOGIN BROWSE READ SUBSCRIBE
private allows: LOGIN
Users
- User N, N1 (None)
- User V (Viewer)
- User C, C1 (Contributor)
- User M (Manager)
Proposed solutions
Dynamic roles
All current and future grants are converted to special dynamic roles. These work by countering any restriction in place and in effect restores the base permissions of the user (user+group
Modify restrictions
Change restrictions to allow CHANGEPERMISSIONS (semi-public: 1039, private: 1024). This allows a page to have the usual operations removed such as reading and writing but allows a user with a base permission that includes CHANGEPERMISSIONS to continue to restrict and grant permissions limited by their base permissions containing other read/write related flags
Use case 1: M makes P1 private with grants(N, V, C)
Status quo:
Response:
- P1 is set to private
- M, N, V, C are given Contributor grants to P1
Results:
- N: None - private + Contributor = Contributor
- V: Viewer - private + Contributor = Contributor
- C: Contributor - private + contributor = Contributor
- M: Manager - private + contributor = Contributor {LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE UNSAFECONTENT} (locked out!)
- N1: None - private = {}
- C1: Contributor - private= {}
Dynamic roles:
Response:
- P1 is set to private
- M, N, V, C are given *dynamic* grants to P1
Results:
- N: None - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = None
- V: Viewer - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = Viewer
- C: Contributor - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = Contributor
- M: Manager - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = Manager
- C1: Contributor - private = {}
- N1: None - private = {}
Modify restrictions:
Response:
- P1 is set to private
- M, N, V, C are given Contributor grants to P1
Results:
- N: None - private + Contributor = Contributor
- V: Viewer - private + Contributor = Contributor
- C: Contributor - private + contributor = Contributor
- M: Manager - private + contributor = Contributor {LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE UNSAFECONTENT CHANGEPERMISSIONS}
- N1: None - private = {}
- C1: Contributor - private = {}
Use case 2: M makes P2 semi-public with grants(N,V,C)
Status quo:
Response:
- P2 is set to semi-public
- M, N, V, C are given Contributor grants to P2
Results:
- N: None - semipublic + Contributor = Contributor
- V: Viewer - semipublic + Contributor = Contributor
- C: Contributor - semipublic + contributor = Contributor
- M: Manager - semipublic + contributor = LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE UNSAFECONTENT (locked out!)
- N1: None - semipublic = {}
- C1: Contributor - semipublic = {LOGIN BROWSE READ SUBSCRIBE}
Dynamic roles:
Response:
- P2 is set to semi-public
- M, N, V, C are given *dynamic* grants to P2
Results:
- N: None - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = None
- V: Viewer - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = Viewer
- C: Contributor - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = Contributor
- M: Manager - (no restrictions subtracted due to *dynamic* grant) + *dynamic* = Manager
- C1: Contributor - semipublic = {LOGIN BROWSE READ SUBSCRIBE}
- N1: None - semipublic = {}
Modify restrictions:
Response:
- P2 is set to semi-public
- M, N, V, C are given Contributor grants to P2
Results:
- N: None - semipublic + Contributor = Contributor
- V: Viewer - semipublic + Contributor = Contributor
- C: Contributor - semipublic + contributor = Contributor
- M: Manager - semipublic + contributor = LOGIN BROWSE READ SUBSCRIBE UPDATE CREATE DELETE UNSAFECONTENT CHANGEPERMISSIONS
- C1: Contributor - semipublic = {LOGIN BROWSE READ SUBSCRIBE}
- N1: None - semipublic = {}