2021-12-23 16:53:53 +08:00
|
|
|
import logging
|
2022-01-10 00:00:14 +08:00
|
|
|
|
|
|
|
from felicity.apps.user import models, schemas
|
2021-04-18 18:37:49 +08:00
|
|
|
|
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)
|
2022-01-10 00:00:14 +08:00
|
|
|
ADMINISTRATOR = ("ADMINISTRATOR", "Administrator")
|
|
|
|
LAB_MANAGER = ("LAB_MANAGER", "Laboratory Manager")
|
|
|
|
SCIENTIST = ("SCIENTIST", "Laboratory Scientist")
|
|
|
|
TECHNOLOGIST = ("TECHNOLOGIST", "Laboratory Technologist")
|
2021-11-08 01:01:12 +08:00
|
|
|
LAB_HAND = ("LAB_HAND", "Laboratory Hand")
|
|
|
|
GUEST = ("GUEST", "Guest")
|
2021-10-29 07:18:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
class FObject:
|
2022-01-10 00:00:14 +08:00
|
|
|
PATIENT = "PATIENT"
|
|
|
|
SAMPLE = "SAMPLE"
|
|
|
|
ANALYTE = "ANALYTE"
|
|
|
|
WORKSHEET = "WORKSHEET"
|
2021-10-29 07:18:28 +08:00
|
|
|
BOARD = "BOARD"
|
|
|
|
DOCUMENT = "DOCUMENT"
|
|
|
|
|
|
|
|
|
|
|
|
class FAction:
|
2022-01-10 00:00:14 +08:00
|
|
|
CREATE = "CREATE"
|
|
|
|
READ = "READ"
|
|
|
|
UPDATE = "UPDATE"
|
|
|
|
DELETE = "DELETE"
|
2021-10-29 07:18:28 +08:00
|
|
|
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: {
|
2022-01-10 00:00:14 +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],
|
|
|
|
],
|
|
|
|
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
|
|
|
},
|
2022-01-10 00:00:14 +08:00
|
|
|
fa.CANCEL: {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
|
|
|
},
|
2022-01-10 00:00:14 +08:00
|
|
|
fa.INVALIDATE: {fo.SAMPLE: [fg.SCIENTIST[0], fg.TECHNOLOGIST[0]]},
|
2021-10-29 07:18:28 +08:00
|
|
|
fa.DELETE: {
|
2022-01-10 00:00:14 +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
|
|
|
|
|
|
|
|
2021-09-20 17:27:40 +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])
|
2021-09-20 17:27:40 +08:00
|
|
|
await models.Group.create(schema)
|
2021-04-18 18:37:49 +08:00
|
|
|
|
|
|
|
|
2021-09-20 17:27:40 +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():
|
2022-01-10 00:00:14 +08:00
|
|
|
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])
|
2021-09-20 17:27:40 +08:00
|
|
|
await models.Permission.create(schema)
|