From a7f0e01301667eeffee6d27c91a42f00cd494902 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 19 Oct 2020 22:17:07 +1100 Subject: [PATCH] Update docs for permissions --- docs/admin/admin.md | 11 +++- docs/admin/export.md | 2 +- docs/admin/permissions.md | 61 +++++++++------------- docs/assets/images/admin/roles.png | Bin 0 -> 14989 bytes docs/assets/images/admin/users_groups.png | Bin 0 -> 12656 bytes 5 files changed, 37 insertions(+), 37 deletions(-) create mode 100644 docs/assets/images/admin/roles.png create mode 100644 docs/assets/images/admin/users_groups.png diff --git a/docs/admin/admin.md b/docs/admin/admin.md index e63f11e..c4b823e 100644 --- a/docs/admin/admin.md +++ b/docs/admin/admin.md @@ -13,7 +13,13 @@ The admin interface allows *staff* users the ability to directly view / add / ed ### Access Admin Interface -To access the admin interface, select the "Admin" option from the drop-down user menu in the top-right corner of the screen. You will be presented with an adminstation panel as shown below: +To access the admin interface, select the "Admin" option from the drop-down user menu in the top-right corner of the screen. + + +!!! info "Staff Only" + Only users with staff acccess will be able to see the "Admin" option + +An adminstation panel will be presented as shown below: {% with id="admin", url="admin/admin.png", description="InvenTree Admin Panel" %} {% include 'img.html' %} @@ -27,6 +33,9 @@ Database objects can be listed and filtered directly. The image below shows an e {% include 'img.html' %} {% endwith %} +!!! info "Permissions" + A "staff" account does not necessarily provide access to all administration options, depending on the roles assigned to the user. + #### Filtering Some admin views support filtering of results against specified criteria. For example, the list of Part objects can be filtered as follows: diff --git a/docs/admin/export.md b/docs/admin/export.md index 1285c52..e9200c6 100644 --- a/docs/admin/export.md +++ b/docs/admin/export.md @@ -4,7 +4,7 @@ title: Exporting Data ## Exporting Data -The [Admin Interface](../admin) provides powerful data exporting capability. When displaying a list of items which support exporting (e.g. Part objects), select the "Export" button from the top-right corner: +The Admin Interface provides powerful data exporting capability. When displaying a list of items which support exporting (e.g. Part objects), select the "Export" button from the top-right corner: {% with id="export", url="admin/export.png", description="Data export" %} {% include 'img.html' %} diff --git a/docs/admin/permissions.md b/docs/admin/permissions.md index 32f872c..c9c5afc 100644 --- a/docs/admin/permissions.md +++ b/docs/admin/permissions.md @@ -4,55 +4,46 @@ title: User Permissions ## Permissions -!!! warning "TODO" - This section requires further work - in particular screenshots! +InvenTree provides access control to various features and data, by assigning each *user* to one (or more) *groups* which have multiple *roles* assigned. -InvenTree provides a permission system which allows authority control on a user or group basis. +!!! info "Superuser" + The superuser account is afforded *all* permissions across an InvenTree intallation. This includes the admin interface, web interface, and API. -!!! info "Django Permissions" - InvenTree implements the django permissions system. For background reading, refer to the [django permissions documentation](https://docs.djangoproject.com/en/3.1/topics/auth/default/#permissions-and-authorization). +### User -Permissions can be assigned for each model in the InvenTree database. The following permission classes are available for each model (or "table") in the database: +A *user* is a single unique account with login credentials. By default, a user is not afforded *any* permissions, and the user must be assigned to the relevent group for the permissions to be assigned. -### View +### Group -Users with the *View* permission for a particular model will be able to view data associated with the model. +A *group* is a named set of zero or more users. Each group is assigned permissions against each possible role. -*For example, a user who has the View permission set for the PurchaseOrder model will be able to view purchase orders.* +### Role -### Add +A *role* is a set of distinct permissions linked to a given subset of InvenTree functionality (more on this below). -Users with the *Add* permission for a particular model will be able to add (create) new instances of that model. +## Roles -*For example, a user who has the Add permission set for the StockItem model will be able to add / create new stock item objects.* +InvenTree functionality is split into a number of distinct roles. A group will have a set of permissions assigned to each of the following roles: -### Edit +- **Admin** - The *admin* role is related to assigning user permissions. +- **Part** - The *part* role is related to accessing Part data +- **Stock** - The *stock* role is related to accessing Stock data +- **Build** - The *build* role is related to accessing Build Order and Bill of Materials data +- **Purchase** - The *purchase* role is related to accessing Purchase Order data +- **Sales** - The *sales* role is related to accessing Sales Order data -Users with the *Edit* permissions for a particular model will be able to edit (adjust) instances of that model. +{% with id="roles", url="admin/roles.png", description="Roles" %} +{% include 'img.html' %} +{% endwith %} -*For example, a user who has the Edit permission set for the Build model will be able to edit Build items.* +### Role Permissions -### Delete +Within each role, there are four levels of available permissions: -Users with the *Delete* permission for a particular model will be able to delete instances of that model. - -## Superuser Account - -The *superuser* account (normally the first user created when configuring the database) automatically has every assigned permission. - -## Assigning Permissions - -The *superuser* account can assign model permissions to any users or groups. - -Additionally, any users who have permissions to edit the *Users* table can also adjust these permissions. - -### User Permissions - -User permissions allow model permissions to be assigned on a single user basis. This is useful if you wish to finely control which InvenTree features a certain user can access. - -### Group Permissions - -Group permissions allow model permissions to be assigned to a *group* of users which greatly simplifies the task of assigning similar permissions to multiple users. +- **View** - The *view* permission allows viewing of content related to the particular role +- **Change** - The *change* permission allows the user to edit / alter / change data associated with the particular role +- **Add** - The *add* permission allows the user to add / create database records associated with the particular role +- **Delete** - The *delete* permission allows the user to delete / remove database records associated with the particular role ## Admin Interface Permissions diff --git a/docs/assets/images/admin/roles.png b/docs/assets/images/admin/roles.png new file mode 100644 index 0000000000000000000000000000000000000000..22ec6fe15cbc69ed7585adb88f32e82be0fa9873 GIT binary patch literal 14989 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/admin/users_groups.png b/docs/assets/images/admin/users_groups.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ccaa8e9ee00408edf1c789242024213fb1614b GIT binary patch literal 12656 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 jUXlORBYV^DOT4bF*gM9J2X#1d2zVo{C