Add overview docs for user auth (login + permissions)
This commit is contained in:
parent
d10e7fc84c
commit
922a7a5f11
172
docs/data/auth.rst
Normal file
172
docs/data/auth.rst
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
|
||||||
|
User Auth
|
||||||
|
=========
|
||||||
|
|
||||||
|
Rattail of course includes the concept of a "user" account. In
|
||||||
|
general the purpose this serves is 2-fold:
|
||||||
|
|
||||||
|
* restrict access to certain parts of the app
|
||||||
|
* provide attribution, e.g. "who did what (and when)"
|
||||||
|
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
Rattail has a User table, which contains the basic account record. It
|
||||||
|
is quite minimal but a User can relate to a Person, and then
|
||||||
|
indirectly a Customer etc.
|
||||||
|
|
||||||
|
User records then are associated to a great many other things,
|
||||||
|
e.g. when a user creates a new batch, their user account is associated
|
||||||
|
with that batch.
|
||||||
|
|
||||||
|
User accounts do not themselves, directly, have "permission" to do
|
||||||
|
anything. But a User may belong to zero or more Roles, which then
|
||||||
|
grant it permission to do things. (Even if zero, the special
|
||||||
|
"Authenticated" role may automatically grant some permissions; more on
|
||||||
|
that below.)
|
||||||
|
|
||||||
|
|
||||||
|
Authentication (aka. Login)
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Normally each person who "logs in" to Rattail must already have a User
|
||||||
|
account. The login succeeds if they supply correct username and
|
||||||
|
password, both of which are stored in the User account (with the
|
||||||
|
password being encrypted).
|
||||||
|
|
||||||
|
Additionally, the User account may be marked "inactive" by the admin; if
|
||||||
|
so then login will not be allowed for that user.
|
||||||
|
|
||||||
|
Customization is possible, for instance to check credentials against
|
||||||
|
Active Directory or your POS system etc. User accounts may even be
|
||||||
|
auto-created on first login etc.
|
||||||
|
|
||||||
|
|
||||||
|
Authorization (aka. Permissions)
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Rattail has a Role table, to define various user roles. The admin can
|
||||||
|
create new roles as needed, to reflect the organizational realities
|
||||||
|
etc.
|
||||||
|
|
||||||
|
Permissions then are granted to (or revoked from) the various roles
|
||||||
|
which are defined. If a permission is "attached" to the role, then
|
||||||
|
the role "has" it, otherwise not.
|
||||||
|
|
||||||
|
Users then may be associated with zero or more roles, and they inherit
|
||||||
|
the full set of permissions from all roles to which they belong.
|
||||||
|
|
||||||
|
|
||||||
|
Special Roles
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
There are 3 special roles which come built-in:
|
||||||
|
|
||||||
|
|
||||||
|
.. _admin_role:
|
||||||
|
|
||||||
|
Administrator
|
||||||
|
+++++++++++++
|
||||||
|
|
||||||
|
This role is special for obvious reasons.
|
||||||
|
|
||||||
|
Only users who belong to this role, can "become root" (see
|
||||||
|
:ref:`becoming_root`).
|
||||||
|
|
||||||
|
Other than that though, the role behaves normally. For instance if
|
||||||
|
you are the admin user and only belong to this role, then you will
|
||||||
|
normally see only those things which are included in this role's
|
||||||
|
permissions (unless you become root of course).
|
||||||
|
|
||||||
|
Permissions for this role may be edited as for any other role.
|
||||||
|
Although there is a chance that you must "become root" to do so; that
|
||||||
|
is normal and not something that requires fixing per se.
|
||||||
|
|
||||||
|
|
||||||
|
Guest
|
||||||
|
+++++
|
||||||
|
|
||||||
|
This "guest" role is really "anonymous" - i.e. any "user" who is
|
||||||
|
actively using the system but has not logged in, falls into this role
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
Permissions for this role may be edited as for any other role. But
|
||||||
|
they will apply *only* to users who are not logged in.
|
||||||
|
|
||||||
|
|
||||||
|
.. _auth_role:
|
||||||
|
|
||||||
|
Authenticated
|
||||||
|
+++++++++++++
|
||||||
|
|
||||||
|
This role automatically applies to any user who *has* logged in,
|
||||||
|
regardless of any other roles the user may belong to.
|
||||||
|
|
||||||
|
Permissions for this role may be edited as for any other role. They
|
||||||
|
will apply to anyone who has logged in.
|
||||||
|
|
||||||
|
|
||||||
|
.. _becoming_root:
|
||||||
|
|
||||||
|
Becoming Root
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Any user who belongs to the special Administrator role (see
|
||||||
|
:ref:`admin_role`) - and *only* users in that role - are automatically
|
||||||
|
granted permission to "become root" when they are logged in.
|
||||||
|
|
||||||
|
Becoming root is similar in spirit to the ``su`` command in Unix.
|
||||||
|
Basically when you become root, all normal permission checks are
|
||||||
|
bypassed; you can do anything "supported" by the system. Note that
|
||||||
|
the term "supported" is used loosely here, and just means whatever the
|
||||||
|
code can "literally" do. (Some of which may be bad for your system!)
|
||||||
|
|
||||||
|
So of course be careful with this, it can be quite handy but if you
|
||||||
|
find yourself "frequently" using it to access some feature, you
|
||||||
|
probably should just grant permission for that feature to the
|
||||||
|
Administrator role, and then you can stop having to become root all
|
||||||
|
the time! (Which helps to avoid doing something bad by accident.)
|
||||||
|
|
||||||
|
|
||||||
|
Syncing Users & Roles
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Users and roles are closely related, but how (and/or whether) they are
|
||||||
|
synced across app nodes, is handled differently.
|
||||||
|
|
||||||
|
|
||||||
|
Users
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
By default all users are synced across all nodes; simple as that.
|
||||||
|
|
||||||
|
It is possible however to mark a user account as "local only" - which
|
||||||
|
will cause that particular user to *not* be synced to other nodes; it
|
||||||
|
will exist only in the current node.
|
||||||
|
|
||||||
|
|
||||||
|
Roles
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
By default *no* roles are synced across nodes; each is "local only"
|
||||||
|
effectively.
|
||||||
|
|
||||||
|
It is possible however to mark a role as "synced" - which will cause
|
||||||
|
that role to be synced across all nodes.
|
||||||
|
|
||||||
|
In a multi-node system it is likely that there are different "types"
|
||||||
|
of nodes. In such a system it may be useful to sync certain roles,
|
||||||
|
but have them only "apply" to certain node types. (The roles must
|
||||||
|
exist in all nodes for sync to work properly, but need only apply to
|
||||||
|
certain nodes.)
|
||||||
|
|
||||||
|
If a role is synced, then not only its primary attributes (e.g. name)
|
||||||
|
will be synced, but also its user "membership" list as well as its
|
||||||
|
permission list.
|
||||||
|
|
||||||
|
The main use case here is in a multi-store setup, where you have one
|
||||||
|
"host" node and two or more "store" nodes. You can create a role with
|
||||||
|
node type of "store" and flag it for sync. The role will be synced
|
||||||
|
along with its users and permissions, but will only be actually *used*
|
||||||
|
on the store nodes.
|
|
@ -9,6 +9,7 @@ Data Layer
|
||||||
db/index
|
db/index
|
||||||
trainwreck
|
trainwreck
|
||||||
other
|
other
|
||||||
|
auth
|
||||||
importing/index
|
importing/index
|
||||||
sync
|
sync
|
||||||
versioning
|
versioning
|
||||||
|
|
Loading…
Reference in a new issue