MikroWizard.mikroman/py/libs/db/db_user_group_perm.py

88 lines
No EOL
3.8 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# db_user_group_perm.py: Models and functions for accsessing db related to user groups relation permision
# MikroWizard.com , Mikrotik router management solution
# Author: sepehr.ha@gmail.com
from peewee import *
from libs.db.db_device import Devices
from libs.db.db import User,BaseModel
from libs.db.db_permissions import Perms
from libs.db.db_groups import DevGroups,DevGroupRel
import logging
log = logging.getLogger("db_user_group_perm")
class DevUserGroupPermRel(BaseModel):
user_id = ForeignKeyField(User, related_name='user_id')
group_id = ForeignKeyField(DevGroups, related_name='group_id')
perm_id = ForeignKeyField(Perms, related_name='perm_id')
class Meta:
db_table = 'user_group_perm_rel'
def __str__(self):
return "DevUserGroupPermRel: user_id: %s, group_id: %s, perm_id: %s" % (self.user_id, self.group_id, self.perm_id)
def __repr__(self):
return "DevUserGroupPermRel: user_id: %s, group_id: %s, perm_id: %s" % (self.user_id, self.group_id, self.perm_id)
def get_user_devices(uid,group_id):
perms=list(DevUserGroupPermRel.select().where(DevUserGroupPermRel.user_id == uid))
for perm in perms:
if group_id==1 or (perm.group_id.id == 1 and not group_id):
return Devices.select()
elif perm.group_id.id == 1 and group_id:
return Devices.select().join(DevGroupRel).where(DevGroupRel.group_id == group_id)
if group_id:
return Devices.select().join(DevGroupRel).join(DevUserGroupPermRel,on=(DevUserGroupPermRel.group_id == DevGroupRel.group_id)).where(DevUserGroupPermRel.user_id == uid, DevGroupRel.group_id == group_id)
return Devices.select().join(DevGroupRel).join(DevUserGroupPermRel,on=(DevUserGroupPermRel.group_id == DevGroupRel.group_id)).where(DevUserGroupPermRel.user_id == uid)
def get_user_devices_by_ids(uid,ids):
perms=list(DevUserGroupPermRel.select().where(DevUserGroupPermRel.user_id == uid))
for perm in perms:
if perm.group_id.id == 1:
return Devices.select().where(Devices.id << ids)
return Devices.select().join(DevGroupRel).join(DevUserGroupPermRel,on=(DevUserGroupPermRel.group_id == DevGroupRel.group_id)).where(DevUserGroupPermRel.user_id == uid,Devices.id << ids)
def delete_group(gid):
#check if group exists
group = DevGroups.select().where(DevGroups.id == gid)
if group:
try:
#First delete records from DevGroupRel
delete=DevGroupRel.delete().where(DevGroupRel.group_id == gid).execute()
#delete group records from DevUserGroupPermRel
delete=DevUserGroupPermRel.delete().where(DevUserGroupPermRel.group_id == gid).execute()
delete=DevGroups.delete().where(DevGroups.id == gid).execute()
return True
except Exception as e:
return False
return False
def get_user_group_perms(uid):
return DevUserGroupPermRel.select().where(DevUserGroupPermRel.user_id == uid)
def create_user_group_perm(user_id, group_id, perm_id):
return DevUserGroupPermRel.create(user_id=user_id, group_id=group_id, perm_id=perm_id)
def query_permission_by_user_and_device_group(uid , devgrupid):
q = DevUserGroupPermRel.select().where(DevUserGroupPermRel.group_id << devgrupid,DevUserGroupPermRel.user_id == uid)
return (q)
def get_user_group_perm(id):
try:
return DevUserGroupPermRel.select().where(DevUserGroupPermRel.id == id).get()
except:
return False
def delete_user_group_perm(id):
try:
return DevUserGroupPermRel.delete().where(DevUserGroupPermRel.id == id).execute()
except:
return False