| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788 | #!/usr/bin/env python# -*- coding: utf-8 -*-from itertools import chainfrom django.views.generic.base import Viewimport django.dispatch, traceback,simplejson as jsonfrom django.views.decorators.csrf import csrf_exemptfrom django.utils.decorators import method_decoratorfrom Model.models import Permissions, Role, Device_Userfrom Service.CommonService import CommonServicefrom Service.ModelService import ModelServicefrom Object.TokenObject import TokenObjectfrom Object.ResponseObject import ResponseObject# 创建信号roles_done = django.dispatch.Signal(providing_args=[])perms_done = django.dispatch.Signal(providing_args=[])rmanger_done = django.dispatch.Signal(providing_args=[])class Roles(object):    '''    role Manager Class    '''    try:        rid = []        rolename = []        roles = Role.objects.all()        for role in roles:            rolename.append(role.roleName)            rid.append(role.rid)    except Exception as e:        pass    def __init__(self):        '''        信号监听, 注册信号        Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)        receiver: 信号接受者,回调函数        sender: 信号发送者        '''        roles_done.connect(self.callback)        self.startSignal()    def callback(self, sender, **kwargs):        '''        开启监听之后,就要去实现回调函数了, 注册信号        :param sender:        :param kwargs:        :return:        '''        Roles.rid = []        Roles.rolename = []        Roles.roles = Role.objects.all()        for role in Roles.roles:            Roles.rolename.append(role.roleName)            Roles.rid.append(role.rid)    def startSignal(self):        '''        触发信号        指定信号发送者        :return:        '''        roles_done.send(sender=self.__class__)    def toJSON(self, QuerySets, fields=None, exclude=None):        listSets = []        for QuerySet in QuerySets:            data = {}            opts = QuerySet._meta            for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):                if not getattr(f, 'editable', False):                    continue                if fields and f.name not in fields:                    continue                if exclude and f.name in exclude:                    continue                data[f.name] = f.value_from_object(QuerySet)            listSets.append(data)        return listSets    def queryAllRoles(self, rolenames=None, exclude=None,response=ResponseObject()):        roles =[]        for role in chain(Roles.roles):            if rolenames and role.roleName not in rolenames:                continue            if exclude and role.roleName in exclude:                continue            roles.append(role)        if len(roles) > 0:            resultDict=CommonService.qs_to_dict(roles)            for k, v in enumerate(resultDict["datas"]):                if len(v['fields']['permission']) > 0:                    resultDict["datas"][k]['fields']['permissionJson']={}                    for pid in v['fields']['permission']:                        permission_query_set= Permissions.objects.get(id=pid)                        resultDict["datas"][k]['fields']['permissionJson'][pid]=permission_query_set.permName            return response.json(0,resultDict)                else:            return response.json(0, {})    def addRoles(self, content=None,response=ResponseObject()):        try:            roleContent = json.loads(content)        except Exception as e:            return response.json(803,repr(e))        else:            rid = roleContent.get('rid', None)            if rid == None:                return response.json(806)            try:                if rid in chain(Roles.rid):                    return response.json(807)                permission_list = roleContent['permission']                roleContent.pop('permission')                role = Role(**roleContent)                role.save()                if len(permission_list) > 0:                    role.permission.add(*permission_list)            except Exception as e:                return response.json(808,repr(e))            else:                self.startSignal()                return response.json(0)    def delRoles(self, rid=None, rolename=None,response=ResponseObject()):        if rid != None:            if rid not in Roles.rid:                return response.json(190)            try:                roletuple = Role.objects.filter(rid = rid).delete()            except Exception as e:                return response.json(192, repr(e))            else:                if roletuple[0] == 1:                    self.startSignal()                    return self.queryAllRoles(response=response)                else:                    return response.json(193,{'error_msg':roletuple})        elif rolename != None:            if rid not in Roles.rolename:                return response.json(191)            try:                roletuple = Role.objects.filter(roleName = rolename).delete()            except Exception as e:                return response.json(192)            else:                if roletuple[0] == 1:                    self.startSignal()                    return self.queryAllRoles(response=response)                else:                    return response.json(193)    def modifyRoles(self, rid=None, content=None,response=ResponseObject()):        if rid not in Roles.rid:            return response.json(190)        try:            roleContent = json.loads(content)        except Exception as e:            errorInfo = traceback.format_exc()            print('The content parameter format is wrong: %s' % errorInfo)            return response.json(803)        else:            try:                permission_list = roleContent['permission']                roleContent.pop('permission')                roleCount = Role.objects.filter(rid = rid).update(**roleContent)                if roleCount:                    if len(permission_list) > 0:                        Role.objects.get(rid=rid).permission.set(permission_list)                    else:                        Role.objects.get(rid=rid).permission.clear()            except Exception as e:                return response.json(194)            else:                if roleCount == 1:                    self.startSignal()                    return self.queryAllRoles(response=response)                else:                    return response.json(195)class Permission(object):    try:        id = []        permname = []        perms = Permissions.objects.all()        for perm in perms:            id.append(perm.id)            permname.append(perm.permName)    except Exception as e:        pass    def __init__(self):        perms_done.connect(self.callback)        self.startSignal()    def callback(self, sender, **kwargs):        Permission.id = []        Permission.permname = []        Permission.roles = Permissions.objects.all()        for perm in Permission.roles:            Permission.id.append(perm.id)            Permission.permname.append(perm.permName)    def startSignal(self):        perms_done.send(sender=self.__class__)    def queryAllPerms(self, perms=None, exclude=None,response=ResponseObject()):        opts =[]        for perm in chain(Permission.permname):            if perms and perm not in perms:                continue            if exclude and perm in exclude:                continue            opts.append(perm)        return response.json(0,{'perms':opts})    def delPerms(self, id=None, permName=None,response=ResponseObject()):        try:            if id != None:                perm = Permissions.objects.filter(id = id)            elif permName != None:                perm = Permissions.objects.filter(permName = permName)            else:                return response.json(800)        except Exception as e:            return response.json(500, repr(e))        else:            if not perm:                return response.json(817)            try:                perm.delete()            except Exception as e:                return response.json(818, repr(e))            else:                self.startSignal()                qs =Permissions.objects.all()                res = CommonService.qs_to_dict(qs)                return response.json(0,res)    @staticmethod    def getAllPermission(response=ResponseObject()):        send_dict=CommonService.qs_to_dict(Permissions.objects.all())        return response.json(0, send_dict)class permManager(object):    def queryMoreRole(self, rid=None):        role = Role.objects.filter(rid = rid)        if not role:            roleDict = {'rid': role[0].rid, 'error_msg': u'The rid does not exist!'}            return roleDict        roleDict = {'rid' : role[0].rid, 'perms': role[0].get_all_permission()}        return roleDict    def queryAllRole(self,response=ResponseObject()):        qs = Role.objects.all()        res = CommonService.qs_to_dict(qs)        return response.json(0, res)# 角色Viewclass queryRoleView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(queryRoleView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        token = request.GET.get('token', None)        return self.ValidationError(token)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        token = request.POST.get('token', None)        return self.ValidationError(token)    def ValidationError(self, token):        response = ResponseObject()        if token is not None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    return self.queryUserRole(userID,response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def queryUserRole(self, userID,response):        eUser = Device_User.objects.filter(userID = userID)        if not eUser:            return response.json(102)        if 100 in eUser[0].get_role_id():            role = Roles()            return role.queryAllRoles(response=response)        own_permission = ModelService.check_permission(userID=userID, permID=30)        if own_permission is True:            role = Roles()            return role.queryAllRoles(response=response)        else:            return response.json(404)class addNewRoleView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(addNewRoleView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        token = request.GET.get('token', None)        content = request.GET.get('content', None)        return self.ValidationError(token, content)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        token = request.POST.get('token', None)        content = request.POST.get('content', None)        return self.ValidationError(token, content)    def ValidationError(self, token, content):        response = ResponseObject()        if token != None and content != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    return self.AddNewUserRole(userID, content,response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def AddNewUserRole(self, userID, content,response):        try:            User = Device_User.objects.filter(userID = userID)        except Exception as e:            return response.json(500,repr(e))        else:            rids = User[0].get_role_id()            if rids == None:                return response.json(606)            Aperms = False            for rid in rids:                if rid < 10:                    continue                else:                    Aperms = True            if Aperms:                role = Roles()                return role.addRoles(content=content,response=response)            else:                return response.json(611)class delRoleView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(delRoleView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        token = request.GET.get('token', None)        rid = request.GET.get('rid', None)        return self.ValidationError(token, rid)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        token = request.POST.get('token', None)        rid = request.POST.get('rid', None)        return self.ValidationError(token, rid)    def ValidationError(self, token, rid):        response = ResponseObject()        if token != None and rid != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    return self.delRole(userID, int(rid),response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(444,'token,rid')    def delRole(self, userID, rid,response):        own_permission = ModelService.check_permission(userID=userID, permID=10)        if own_permission is True:            role = Roles()            return role.delRoles(rid=rid,response=response)        else:            return response.json(404)class modifyRoleView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(modifyRoleView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        token = request.GET.get('token', None)        rid =  request.GET.get('rid', None)        content = request.GET.get('content', None)        return self.ValidationError(token, rid, content)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        token = request.POST.get('token', None)        rid = request.POST.get('rid', None)        content = request.POST.get('content', None)        return self.ValidationError(token, rid, content)    def ValidationError(self, token, rid, content):        response = ResponseObject()        if token != None and content != None and rid != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    return self.modifyRole(userID, int(rid), content,response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(444,'token,content,rid')    def modifyRole(self, userID, rid, content,response):        try:            User = Device_User.objects.filter(userID = userID)        except Exception as e:            return response.json(500, repr(e))        else:            rids = User[0].get_role_id()            if rids == None:                return response.json(606)            Aperms = False            for rrid in rids:                if rrid < 10:                    continue                else:                    Aperms = True            if Aperms:                role = Roles()                return role.modifyRoles(rid=rid, content=content,response=response)            else:                return response.json(611)# 权限Viewclass addNewPermsView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(addNewPermsView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'utf-8'        request_dict = request.GET        return self.ValidationError(request_dict)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        request_dict = request.POST        return self.ValidationError(request_dict)    def ValidationError(self, request_dict):        response = ResponseObject()        token = request_dict.get('token', None)        type = request_dict.get('type', None)        if token != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    if type == 'PC':                        return self.addNewPermission(userID=userID, request_dict=request_dict,response=response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def addNewPermission(self, userID, request_dict,response):        user_valid = Device_User.objects.filter(userID=userID).order_by('-data_joined')        if user_valid:# 判断是否为超级管理员            own_perm = ModelService.check_permission(userID,40)            # if user_valid[0].is_superuser == 100 and user_valid[0].is_superuser != 1 and user_valid[0].is_superuser != 10:            if own_perm is not True:                return response.json(612)            else:                add_dict = {'id':int(request_dict['id']),'permName':request_dict['permName'],'description':request_dict['description']}                try:                    perm = Permissions(**add_dict)                    perm.save()                except Exception as e:                    return response.json(816,repr(e))                else:                    return Permission.getAllPermission(response=response)        else:            return response.json(113)class delPermsView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(delPermsView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'utf-8'        request_dict = request.GET        return self.ValidationError(request_dict)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        request_dict = request.POST        return self.ValidationError(request_dict)    def ValidationError(self, request_dict):        token = request_dict.get('token', None)        id = request_dict.get('id', None)        response = ResponseObject()        if token != None and id != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    return self.delPerms(userID, id,response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def delPerms(self, userID, id,response):        try:            User = Device_User.objects.filter(userID = userID)        except Exception as e:            return response.json(500, repr(e))        else:            rids = User[0].get_role_id()            if len(rids) == 0:                return response.json(606)            Aperms = False            for rid in rids:                if rid < 10:                    continue                else:                    Aperms = True            if Aperms:                perms = Permission()                return perms.delPerms(id=id,response=response)            else:                return response.json(611)class queryPermsView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(queryPermsView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        token = request.GET.get('token', None)        request_data = request.GET        return self.ValidationError(token,request_data)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        token = request.POST.get('token', None)        request_data = request.POST        return self.ValidationError(token,request_data)    def ValidationError(self, token, request_data):        response = ResponseObject()        if token != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    type = request_data.get('type',None)                    if type == 'PC':                        return self.querAllPermission(userID,response)                    else:                        return self.delPerms(userID,response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def querAllPermission(self, userID,response):        own_perm = ModelService.check_permission(userID,30)        if own_perm is True:            qs = Permissions.objects.all()            res = CommonService.qs_to_dict(qs)            return response.json(0, res)        else:            return response.json(404)    def delPerms(self, userID,response):        try:            User = Device_User.objects.filter(userID = userID)        except Exception as e:            return response.json(500, repr(e))        else:            rids = User[0].get_role_id()            if len(rids) == 0:                return response.json(606)            Aperms = False            for rid in rids:                if rid < 10:                    continue                else:                    Aperms = True            if Aperms:                perms = Permission()                return perms.queryAllPerms(response=response)            else:                return response.json(611)class modifyPermsView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(modifyPermsView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        request_dict = request.GET        return self.ValidationError(request_dict)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        # token = request.POST.get('token', None)        request_dict = request.POST        return self.ValidationError(request_dict)    def ValidationError(self, request_dict):        token = request_dict.get('token', None)        response = ResponseObject()        if token != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    update_dict = {'permName':request_dict['permName'],'description':request_dict['description']}                    return self.modifyPerms(userID=userID,id=request_dict['id'], update_dict=update_dict,response=response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def modifyPerms(self, userID, id, update_dict,response):        try:            User = Device_User.objects.filter(userID = userID)        except Exception as e:            return response.json(500, repr(e))        else:            rids = User[0].get_role_id()            if len(rids) == 0:                return response.json(606)            Aperms = False            for rid in rids:                if rid < 10:                    continue                else:                    Aperms = True            if Aperms:                try:                    Permissions.objects.filter(id = int(id)).update(**update_dict)                except Exception as e:                    return response.json(500,repr(e))                else:                    return Permission.getAllPermission(response=response)            else:                return response.json(611)class queryRolePermsView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(queryRolePermsView, self).dispatch(*args, **kwargs)    def get(self, request, *args, **kwargs):        request.encoding = 'gb2312'        token = request.GET.get('token', None)        allUser = request.GET.get('allUser', False)        return self.ValidationError(token, allUser)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        token = request.POST.get('token', None)        allUser = request.POST.get('allUser', False)        return self.ValidationError(token, allUser)    def ValidationError(self, token, allUser):        response = ResponseObject()        if token != None:            tko = TokenObject(token)            tko.valid()            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if userID:                    return self.queryRolePerms(userID, allUser,response)                else:                    return response.json(309)            else:                return response.json(tko.code)        else:            return response.json(800)    def queryRolePerms(self, userID, allUser,response):        try:            dUser = Device_User.objects.filter(userID=userID).order_by('-data_joined')        except Exception as e:            return response.json(500, repr(e))        else:            if not dUser:                return response.json(113)            if allUser == '0' or allUser == 'False' or allUser == 'false':                allUser = False            elif allUser == '1' or allUser == 'True' or allUser == 'true':                allUser = True            else:                allUser = False            pM = permManager()            if not allUser:                ridslist =[]                rids = dUser[0].get_role_id()                for rid in rids:                    ridslist.append(pM.queryMoreRole(rid=rid))                sqlDict = dict(zip(["datas"], [ridslist]))                return response.json(0,sqlDict)            else:                if 100 in dUser[0].get_role_id():                    return pM.queryAllRole(response=response)                else:                    return response.json(612)
 |