def permissionsload(context,
                    main=None,
                    add=None,
                    filterinfo=None,
                    session=None,
                    elementId=None,
                    data=None):
    permissions = PermissionsCursor(context)
    roles = RolesCursor(context)
    rolesCustomPerms = rolesCustomPermsCursor(context)
    customPerms = customPermsCursor(context)
    customPermsTypes = customPermsTypesCursor(context)
    cursors = [
        roles, permissions, customPermsTypes, customPerms, rolesCustomPerms
    ]
    files = [
        'roles', 'permissions', 'customPermsTypes', 'customPerms',
        'rolesCustomPerms'
    ]

    for i in range(len(cursors)):
        filePath = os.path.join(
            os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
            files[i] + '.xml')
        # raise Exception(filePath)
        if add == 'upload':
            dataStream = FileOutputStream(filePath)
        elif add == 'download':
            dataStream = FileInputStream(filePath)
        exchange = DataBaseXMLExchange(dataStream, cursors[i])
        if add == 'upload':
            exchange.downloadXML()
        elif add == 'download':
            exchange.uploadXML()
        dataStream.close()
Example #2
0
def userHasPermission(context, sid, permission):
    """
        Функция возвращает False, если разрешения не существует или
        у данного пользователя нет такого разрешения.
        В случае, если у данного пользователя разрешение есть,
        возвращает True
        sid - sid пользователя
        permission - разрешение из таблицы customPermissions
    """
    userRoles = UserRolesCursor(context)
    if userRoles.tryGet(sid, "editor"):
        # Для роли editor есть все(!) разрешения
        return True
    userRoles.clear()
    # выбираем разрешения данного пользователя.
    userRoles.setRange("userid", sid)
    permissions = customPermsCursor(context)
    if not permissions.tryGet(permission):
        # Разрешения не нашли, возвращаем False
        return False
    rolePermissions = rolesCustomPermsCursor(context)
    if userRoles.tryFindSet():
        while True:
            rolePermissions.setRange("roleid", userRoles.roleid)
            rolePermissions.setRange("permissionId", permission)
            if rolePermissions.tryFirst():
                return True
            if not userRoles.nextInSet():
                break
    return False
def cardDelete(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    currentRecordId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']
    rolesCustomPermissions=rolesCustomPermsCursor(context)
    rolesCustomPermissions.setRange("permissionId", currentRecordId)
    rolesCustomPermissions.deleteAll()
    permission=customPermsCursor(context)
    permission.get(currentRecordId)
    permission.delete()
Example #4
0
def gridMeta(context,
             main=None,
             add=None,
             filterinfo=None,
             session=None,
             elementId=None):
    u'''Функция получения настроек грида. '''

    # Курсор таблицы permissions
    permissions = customPermsCursor(context)
    # Вычисляем количества записей в таблице
    totalcount = permissions.count()
    # Заголовок таблицы
    header = "Разрешения"

    _header = {
        "id": ["~~id"],
        "name": [u"Разрешение"],
        "description": [u"Описание"],
        "type": [u"Тип"],
        "properties": [u"properties"]
    }
    # Определяем список полей таблицы для отображения
    settings = {}
    settings["gridsettings"] = {
        "columns": {
            "col": []
        },
        "properties": {
            "@pagesize": "50",
            "@gridWidth": "100%",
            "@gridHeight": getGridHeight(session, 2.1, 60, 67),
            "@totalCount": totalcount,
            "@profile": "default.properties"
        },
        "labels": {
            "header": header
        }
    }
    # Добавляем поля для отображения в gridsettings
    settings["gridsettings"]["columns"]["col"].append({
        "@id": _header["name"][0],
        "@width": "120px"
    })
    settings["gridsettings"]["columns"]["col"].append({
        "@id":
        _header["description"][0],
        "@width":
        "240px"
    })
    settings["gridsettings"]["columns"]["col"].append({
        "@id": _header["type"][0],
        "@width": "120px"
    })
    res = XMLJSONConverter.jsonToXml(json.dumps(settings))
    return JythonDTO(None, res)
def permissionsDownload(context,
                        main=None,
                        add=None,
                        filterinfo=None,
                        session=None,
                        elementId=None,
                        data=None):
    customPerms = customPermsCursor(context)
    fileName = 'customPermissions'
    return tableDownload(customPerms, fileName)
def permissionsUpload(context,
                      main=None,
                      add=None,
                      filterinfo=None,
                      session=None,
                      elementId=None,
                      data=None,
                      fileName=None,
                      file=None):
    customPerms = customPermsCursor(context)
    tableUpload(customPerms, file)
    return context.message(u"Данные успешно загружены в таблицу")
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника типов разрешений. '''
    permissions = customPermsCursor(context)
    content = json.loads(xformsdata)["schema"]["permission"]
    permissions.name = content["@name"]
    permissions.description = content["@description"]
    permissions.type = content["@type"]

    if add == 'add' and permissions.canInsert() and permissions.canModify():
        if not permissions.tryInsert():
            permissionsOld = customPermsCursor(context)
            permissionsOld.get(content["@name"])
            permissions.recversion = permissionsOld.recversion
            permissions.update()
    elif add == 'add' and permissions.canInsert():
        permissions.insert()
    elif add == 'edit' and permissions.canModify():
        permissionsOld = customPermsCursor(context)
        currId = json.loads(session)['sessioncontext']['related'][
            'gridContext']['currentRecordId']
        permissionsOld.get(currId)
        if permissionsOld.name == permissions.name:
            permissions.recversion = permissionsOld.recversion
            permissions.update()
        elif permissions.canInsert():
            permissions.insert()
            permissionsOld.delete()
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")
    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
Example #8
0
def permInit(context):
    #raise Exception(context)
    customPermsTypes = customPermsTypesCursor(context)
    if not customPermsTypes.tryGet('forms'):
        customPermsTypes.name = 'forms'
        customPermsTypes.description = u'Формы'
        customPermsTypes.insert()
    customPerms = customPermsCursor(context)
    if not customPerms.tryGet('htmlHintsEdit'):
        customPerms.name = 'htmlHintsEdit'
        customPerms.description = u'Разрешение редактирование подсказок в формате HTML'
        customPerms.type = 'forms'
        customPerms.insert()
    rolesCustomPerms = rolesCustomPermsCursor(context)
    if not rolesCustomPerms.tryGet('editor', 'htmlHintsEdit'):
        rolesCustomPerms.roleid = 'editor'
        rolesCustomPerms.permissionId = 'htmlHintsEdit'
        rolesCustomPerms.insert()
Example #9
0
def getPermissionsOfTypeAndUser(context, sid, permissionType=None):
    u"""
        Функция возвращает курсор с разрешениями данного типа,
        которые есть у данного пользователя. Работает для permissions (если permissionType - None или tables)
        и для customPermissions.
        Если разрешений нет, возвращает None
    """
    # Насколько знаю, ни в одном решении функция не используется. Курсор с разрешениями пока никому не пригодился
    # Возможно, стоит выпилить.
    userRoles = UserrolesCursor(context)
    userRoles.setRange("userid", sid)
    filter_string = ""
    if userRoles.tryFindSet():
        filter_string = "'" + userRoles.roleid + "'"
        while True:
            if userRoles.nextInSet():
                filter_string += "|'" + userRoles.roleid + "'"
            else:
                break

    if permissionType is None or permissionType == 'tables':
        # получаем разрешения из таблицы permissions
        permissions = PermissionsCursor(context)
        if filter_string == "":
            return None
        permissions.setFilter("roleid", filter_string)
    else:
        # получаем разрешения из таблицы customPermissions
        permissions = customPermsCursor(context)
        rolePermissions = rolesCustomPermsCursor(context)
        rolePermissions.setFilter("roleid", filter_string)
        filter_string = ""
        if rolePermissions.tryFindSet():
            filter_string = "'" + rolePermissions.permissionId + "'"
            while True:
                if rolePermissions.nextInSet():
                    filter_string += "|'" + rolePermissions.permissionId + "'"
                else:
                    break
        if filter_string != "":
            permissions.setFilter("name", filter_string)
        else:
            return None
    return permissions
def cardData(context,
             main=None,
             add=None,
             filterinfo=None,
             session=None,
             elementId=None):
    u'''Функция данных для карточки редактирования содержимого таблицы типоа разрешений. '''

    permissions = customPermsCursor(context)

    if add == 'add':
        typeId = json.loads(session)['sessioncontext']['related'][
            'xformsContext']['formData']['schema']['permission']['@type']
        xformsdata = {
            "schema": {
                "permission": {
                    "@name": "",
                    "@description": "",
                    "@type": typeId
                }
            }
        }
    elif add == 'edit':
        currId = json.loads(session)['sessioncontext']['related'][
            'gridContext']['currentRecordId']
        permissions.get(currId)
        xformsdata = {
            "schema": {
                "permission": {
                    "@name": permissions.name,
                    "@description": permissions.description,
                    "@type": permissions.type
                }
            }
        }
    # print xformsdata
    xformssettings = {
        "properties": {
            "event": {
                "@name": "single_click",
                "@linkId": "1",
                "action": {
                    "#sorted": [{
                        "main_context": "current"
                    }, {
                        "datapanel": {
                            "@type": "current",
                            "@tab": "current",
                            "element": {
                                "@id": "customPermissionsGrid",
                                "add_context": ""
                            }
                        }
                    }]
                }
            }
        }
    }

    return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)),
                     XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))
Example #11
0
def securityInit(context):
    u"""Функция устанавливает необходимые для работы гранулы значения таблиц:
    numbersSeries
    linesOfNumbersSeries
    customPermsTypes
    customPerms
    rolesCustomPerms
    """
    numbersSeries = numbersSeriesCursor(context)
    linesOfNumbersSeries = linesOfNumbersSeriesCursor(context)
    numbersSeries.id = 'subjects'
    numbersSeries.description = 'subjects'
    if not numbersSeries.tryInsert():
        numbersSeries.update()
    if not linesOfNumbersSeries.tryGet('subjects', 1):
#        sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        now = datetime.datetime.now()#fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S")
        linesOfNumbersSeries.seriesId = 'subjects'
        linesOfNumbersSeries.numberOfLine = 1                
        linesOfNumbersSeries.startingDate = now#sdf.parse(now)
        linesOfNumbersSeries.startingNumber = 10
        linesOfNumbersSeries.endingNumber = 100000
        linesOfNumbersSeries.incrimentByNumber = 1
        linesOfNumbersSeries.isOpened = True
        linesOfNumbersSeries.prefix = 'subject-'
        linesOfNumbersSeries.postfix = '-'
        linesOfNumbersSeries.isFixedLength = False
        linesOfNumbersSeries.insert()
    # Добавили серии номеров для таблицы subjects
    customPermsTypes = customPermsTypesCursor(context)
    if not customPermsTypes.tryGet('navigator'):
        customPermsTypes.name='navigator'
        customPermsTypes.description=u'Пункты меню навигатора'
        customPermsTypes.insert()
    # Добавили (если еще нет) тип разрешений "Пункты меню навигатора" 
    customPerms = customPermsCursor(context)
    if not customPerms.tryGet('loginsSubjectsPoint'):
        customPerms.name='loginsSubjectsPoint'
        customPerms.description=u'Разрешение на отображение пункта меню Сотрудники и Пользователи'
        customPerms.type='navigator'
        customPerms.insert()
    if not customPerms.tryGet('rolesPoint'):
        customPerms.name='rolesPoint'
        customPerms.description=u'Разрешение на отображение пункта меню Роли'
        customPerms.type='navigator'
        customPerms.insert()
    if not customPerms.tryGet('permissionsPoint'):
        customPerms.name='permissionsPoint'
        customPerms.description=u'Разрешение на отображение пункта меню Разрешения'
        customPerms.type='navigator'
        customPerms.insert()        
    if not customPerms.tryGet('numbersSeriesPoint'):
        customPerms.name='numbersSeriesPoint'
        customPerms.description=u'Разрешение на отображение пункта меню Серии номеров'
        customPerms.type='navigator'
        customPerms.insert()
    # Добавили (если еще нет) разрешения на отображения пунктов меню гранул common и security 
    rolesCustomPerms = rolesCustomPermsCursor(context)
    if not rolesCustomPerms.tryGet('editor', 'loginsSubjectsPoint'):
        rolesCustomPerms.roleid='editor'
        rolesCustomPerms.permissionId='loginsSubjectsPoint'
        rolesCustomPerms.insert()
    if not rolesCustomPerms.tryGet('editor', 'rolesPoint'):
        rolesCustomPerms.roleid='editor'
        rolesCustomPerms.permissionId='rolesPoint'
        rolesCustomPerms.insert()
    if not rolesCustomPerms.tryGet('editor', 'permissionsPoint'):
        rolesCustomPerms.roleid='editor'
        rolesCustomPerms.permissionId='permissionsPoint'
        rolesCustomPerms.insert()
    if not rolesCustomPerms.tryGet('editor', 'numbersSeriesPoint'):
        rolesCustomPerms.roleid='editor'
        rolesCustomPerms.permissionId='numbersSeriesPoint'
        rolesCustomPerms.insert()
    #Привязываем добавленные разрешения к роли editor 
    # Уже неактуально, так как функция userHasPermission возвращает True в любом случае, если роль - editor  
Example #12
0
def gridToolBar(context,
                main=None,
                add=None,
                filterinfo=None,
                session=None,
                elementId=None):
    u'''Toolbar для грида. '''

    if 'currentRecordId' not in json.loads(
            session)['sessioncontext']['related']['gridContext']:
        style = "true"
    else:
        style = "false"

    data = {"gridtoolbar": {"item": []}}
    # Курсор таблицы permissions
    permissions = customPermsCursor(context)

    if permissions.canInsert():
        data["gridtoolbar"]["item"].append({
            "@img": 'gridToolBar/addDirectory.png',
            "@text": "Добавить",
            "@hint": "Добавить",
            "@disable": "false",
            "action": {
                "@show_in":
                "MODAL_WINDOW",
                "#sorted": [{
                    "main_context": "current"
                }, {
                    "modalwindow": {
                        "@caption": "Добавление типа разрешения",
                        "@height": "400",
                        "@width": "500"
                    }
                }, {
                    "datapanel": {
                        "@type": "current",
                        "@tab": "current",
                        "element": {
                            "@id": "customPermissionsXforms",
                            "add_context": "add"
                        }
                    }
                }]
            }
        })
    if permissions.canModify():
        data["gridtoolbar"]["item"].append({
            "@img": 'gridToolBar/editDocument.png',
            "@text": "Редактировать",
            "@hint": "Редактировать",
            "@disable": style,
            "action": {
                "@show_in":
                "MODAL_WINDOW",
                "#sorted": [{
                    "main_context": "current"
                }, {
                    "modalwindow": {
                        "@caption": "Редактирование типа разрешения",
                        "@height": "400",
                        "@width": "500"
                    }
                }, {
                    "datapanel": {
                        "@type": "current",
                        "@tab": "current",
                        "element": {
                            "@id": "customPermissionsXforms",
                            "add_context": "edit"
                        }
                    }
                }]
            }
        })
    if permissions.canDelete():
        data["gridtoolbar"]["item"].append({
            "@img": 'gridToolBar/deleteDocument.png',
            "@text": "Удалить",
            "@hint": "Удалить",
            "@disable": style,
            "action": {
                "@show_in":
                "MODAL_WINDOW",
                "#sorted": [{
                    "main_context": "current"
                }, {
                    "modalwindow": {
                        "@caption": "Удаление типа разрешения",
                        "@height": "300",
                        "@width": "450"
                    }
                }, {
                    "datapanel": {
                        "@type": "current",
                        "@tab": "current",
                        "element": {
                            "@id": "customPermissionsXformDelete",
                            "add_context": "delete"
                        }
                    }
                }]
            }
        })
    data["gridtoolbar"]["item"].append({
        "@img": 'gridToolBar/arrowDown.png',
        "@text": "Скачать",
        "@hint": "Скачать прочие разрешения в xml",
        "@disable": "false",
        "action": {
            "@show_in":
            "MODAL_WINDOW",
            "#sorted": [{
                "main_context": "current"
            }, {
                "modalwindow": {
                    "@caption": "Скачать разрешения",
                    "@height": "300",
                    "@width": "450"
                }
            }, {
                "datapanel": {
                    "@type": "current",
                    "@tab": "current",
                    "element": {
                        "@id": "customPermissionsDownloadXform",
                        "add_context": "download"
                    }
                }
            }]
        }
    })
    data["gridtoolbar"]["item"].append({
        "@img": 'gridToolBar/arrowUp.png',
        "@text": "Загрузить",
        "@hint": "Загрузить прочие разрешения из xml",
        "@disable": "false",
        "action": {
            "@show_in":
            "MODAL_WINDOW",
            "#sorted": [{
                "main_context": "current"
            }, {
                "modalwindow": {
                    "@caption": "Загрузить разрешения",
                    "@height": "300",
                    "@width": "450"
                }
            }, {
                "datapanel": {
                    "@type": "current",
                    "@tab": "current",
                    "element": {
                        "@id": "customPermissionsUploadXform",
                        "add_context": "upload"
                    }
                }
            }]
        }
    })

    return XMLJSONConverter.jsonToXml(json.dumps(data))
Example #13
0
def gridData(context,
             main=None,
             add=None,
             filterinfo=None,
             session=None,
             elementId=None,
             sortColumnList=None,
             firstrecord=None,
             pagesize=None):
    u'''Функция получения данных для грида. '''
    # Создание экземпляра курсора разрешения
    permissions = customPermsCursor(context)
    if sortColumnList:
        sortName = toHexForXml(sortColumnList[0].id)
        sortType = unicode(sortColumnList[0].sorting).lower()
    else:
        sortName = None

    if 'formData' in session:
        typeId = json.loads(session)['sessioncontext']['related'][
            'xformsContext']['formData']['schema']['permission']['@type']
        if typeId:
            permissions.setRange('type', typeId)

    permissions.orderBy('name')

    # Определяем переменную для JSON данных
    data = {"records": {"rec": []}}
    # Проходим по таблице и заполняем data
    _header = {
        "id": ["~~id"],
        "name": [u"Разрешение"],
        "description": [u"Описание"],
        "type": [u"Тип"],
        "properties": [u"properties"]
    }
    for column in _header:
        _header[column].append(toHexForXml(_header[column][0]))
        if sortName == _header[column][1]:
            permissions.orderBy("%s %s" % (column, sortType))
    permissions.limit(firstrecord - 1, pagesize)
    for permissions in permissions.iterate():
        permDict = {}
        permDict[_header["id"][1]] = permissions.name
        permDict[_header["name"][1]] = permissions.name or ''
        permDict[_header["description"][1]] = permissions.description or ''
        permDict[_header["type"][1]] = permissions.type or ''

        permDict['properties'] = {
            "event": {
                "@name": "row_single_click",
                "action": {
                    "#sorted": [{
                        "main_context": 'current'
                    }, {
                        "datapanel": {
                            '@type': "current",
                            '@tab': "current",
                            "element": {
                                "@id": "rolesCustomPermissionsGrid"
                            }
                        }
                    }]
                }
            }
        }
        data["records"]["rec"].append(permDict)

    res = XMLJSONConverter.jsonToXml(json.dumps(data))
    return JythonDTO(res, None)