felicity-lims/backend/felicity_lims/felicity/init/setup/groups_perms.py

121 lines
3.6 KiB
Python
Raw Normal View History

2021-12-23 16:53:53 +08:00
import logging
2021-04-18 18:37:49 +08:00
from felicity.apps.user import models
from felicity.apps.user import schemas
2021-12-23 16:53:53 +08:00
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
2021-10-29 07:18:28 +08:00
2021-11-08 01:01:12 +08:00
class FGroup: # (KEYWORD, NAME)
ADMINISTRATOR = ('ADMINISTRATOR', "Administrator")
LAB_MANAGER = ('LAB_MANAGER', "Laboratory Manager")
SCIENTIST = ('SCIENTIST', "Laboratory Scientist")
TECHNOLOGIST = ('TECHNOLOGIST', "Laboratory Technologist")
LAB_HAND = ("LAB_HAND", "Laboratory Hand")
GUEST = ("GUEST", "Guest")
2021-10-29 07:18:28 +08:00
class FObject:
PATIENT = 'PATIENT'
SAMPLE = 'SAMPLE'
ANALYTE = 'ANALYTE'
WORKSHEET = 'WORKSHEET'
BOARD = "BOARD"
DOCUMENT = "DOCUMENT"
class FAction:
CREATE = 'CREATE'
READ = 'READ'
UPDATE = 'UPDATE'
DELETE = 'DELETE'
SUBMIT = "SUBMIT"
VERIFY = "VERIFY"
CANCEL = "CANCEL"
INVALIDATE = "INVALIDATE"
REJECT = "REJECT"
RETEST = "RETEST"
fg = FGroup()
fo = FObject()
fa = FAction()
2021-04-18 18:37:49 +08:00
groups = [
2021-10-29 07:18:28 +08:00
fg.ADMINISTRATOR,
fg.LAB_MANAGER,
fg.SCIENTIST,
fg.TECHNOLOGIST,
fg.LAB_HAND,
fg.GUEST,
2021-04-18 18:37:49 +08:00
]
2021-10-29 07:18:28 +08:00
# default permissions
permissions = {
fa.CREATE: {
2021-11-08 01:01:12 +08:00
fo.PATIENT: [fg.LAB_HAND[0]],
fo.SAMPLE: [fg.LAB_HAND[0]],
fo.WORKSHEET: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
2021-10-29 07:18:28 +08:00
},
fa.READ: {
2021-12-23 16:53:53 +08:00
fo.PATIENT: [fg.ADMINISTRATOR[0], fg.LAB_MANAGER[0], fg.SCIENTIST[0], fg.TECHNOLOGIST[0], fg.LAB_HAND[0],
fg.GUEST[0]],
fo.SAMPLE: [fg.ADMINISTRATOR[0], fg.LAB_MANAGER[0], fg.SCIENTIST[0], fg.TECHNOLOGIST[0], fg.LAB_HAND[0],
fg.GUEST[0]],
2021-11-08 01:01:12 +08:00
fo.WORKSHEET: [fg.ADMINISTRATOR[0], fg.LAB_MANAGER[0], fg.SCIENTIST[0], fg.TECHNOLOGIST[0], fg.GUEST[0]],
2021-10-29 07:18:28 +08:00
},
fa.UPDATE: {
2021-11-08 01:01:12 +08:00
fo.PATIENT: [fg.LAB_HAND[0]],
fo.SAMPLE: [fg.LAB_HAND[0]],
fo.WORKSHEET: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
2021-10-29 07:18:28 +08:00
},
fa.SUBMIT: {
2021-11-08 01:01:12 +08:00
fo.SAMPLE: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
fo.WORKSHEET: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
2021-10-29 07:18:28 +08:00
},
fa.VERIFY: {
2021-11-08 01:01:12 +08:00
fo.SAMPLE: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
fo.WORKSHEET: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
2021-10-29 07:18:28 +08:00
},
fa.CANCEL: {
2021-11-08 01:01:12 +08:00
fo.SAMPLE: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0], fg.LAB_HAND[0]],
2021-10-29 07:18:28 +08:00
},
fa.RETEST: {
2021-11-08 01:01:12 +08:00
fo.SAMPLE: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
fo.WORKSHEET: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
2021-10-29 07:18:28 +08:00
},
fa.INVALIDATE: {
2021-11-08 01:01:12 +08:00
fo.SAMPLE: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]],
2021-10-29 07:18:28 +08:00
},
fa.DELETE: {
2021-11-08 01:01:12 +08:00
fo.BOARD: [fg.ADMINISTRATOR[0], fg.LAB_MANAGER[0], fg.SCIENTIST[0], fg.TECHNOLOGIST[0], fg.LAB_HAND[0]],
fo.DOCUMENT: [fg.ADMINISTRATOR[0], fg.LAB_MANAGER[0], fg.SCIENTIST[0], fg.TECHNOLOGIST[0], fg.LAB_HAND[0]],
2021-10-29 07:18:28 +08:00
},
}
def get_action_targets(): # e.g ('verify', 'worksheet'),
final = []
for a_key, action in permissions.items():
for o_key, obj in action.items():
final.append((a_key, o_key))
return final
2021-04-18 18:37:49 +08:00
async def create_groups() -> None:
2021-12-23 16:53:53 +08:00
logger.info(f"Setting up groups .....")
2021-04-18 18:37:49 +08:00
for _grp in groups:
2021-11-08 01:01:12 +08:00
exists = await models.Group.get(name=_grp[1])
2021-04-18 18:37:49 +08:00
if not exists:
2021-11-08 01:01:12 +08:00
schema = schemas.GroupCreate(name=_grp[1], keyword=_grp[0])
await models.Group.create(schema)
2021-04-18 18:37:49 +08:00
async def create_permissions() -> None:
2021-12-23 16:53:53 +08:00
logger.info(f"Setting up permissions .....")
2021-10-29 07:18:28 +08:00
for _perm in get_action_targets():
exists = await models.Permission.get(action__exact=_perm[0], target__exact=_perm[1])
2021-04-18 18:37:49 +08:00
if not exists:
schema = schemas.PermissionCreate(action=_perm[0], target=_perm[1])
await models.Permission.create(schema)