project-safari / zebra

lab resource inventory and reservation system
Apache License 2.0
6 stars 8 forks source link

AAA Security #193

Open evaachim opened 10 months ago

evaachim commented 10 months ago

Includes #150 #151 #152 #157

evaachim commented 10 months ago

Look at who does what on the server, access control, adding fields to accommodate.

evaachim commented 10 months ago

Other things to consider:

  1. What rules can an authorized user have (and what can he do: view, add, … )
  2. The perspective is that of a data center
  3. Multiple types of users
  4. Restrict users
evaachim commented 10 months ago

List of proposed user types:

evaachim commented 10 months ago

APIs that can be used for this purpose by each user:

evaachim commented 10 months ago

CRUD Operations for:

CRUD for user-type resources: admins

CRUD for all network resources: admins

CRUD for users in their group: super users CRUD for all network resources in their group: super user

CRUD for their personal resources: regular users

Only VIEW resources: limited users

evaachim commented 10 months ago

CRUD actions allowed for each user - continued -

Admins:

Create: Users and resources, labels (moderate labels) Read: Users and resources, labels (moderate labels) Update: users and resources, labels (moderate labels) Delete: users and resources, labels (moderate labels)

Super Users:

Create: resources Read: resources, users, labels Update: resources, (groups of) users Delete: resources

Regular Users:

Create: (personal) resources Read: (personal) resources, Update: (personal) resources, Delete: (personal) resources,

Limited Users:

Create: no Read: (personal) resources Update: (personal) resources - potentially Delete: (personal) resources - potentially

chuckluv commented 10 months ago

Data Structure Ideas for User Access:

  1. 
    UserAccess map[Resourse UUID]AccessLevels

AccessLevels{ ReadWrite map[User UUID]User ReadOnly map[User UUID]User NoAccess map[User UUID]User }

2. 

UserAccess map[User UUID]AccessLevels

AccessLevels{ ReadWrite map[Resourse UUID]Resourse ReadOnly map[Resourse UUID]Resourse NoAccess map[Resourse UUID]Resourse }

evaachim commented 10 months ago

User Labels Ideas for User Group (Resource Type) Access:

resource.group:admin

resource.group:su

resource.group:user

resource.group:limited