예제 #1
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
예제 #2
0
def gridSaveRecord(context=None,
                   main=None,
                   add=None,
                   session=None,
                   filterinfo=None,
                   elementId=None,
                   saveData=None):
    saveData = json.loads(saveData)["savedata"]["data"]
    rolesPermissions = rolesCustomPermsCursor(context)
    roleId = saveData["col2"]
    permissionId = json.loads(saveData["id"])["permission"]
    if rolesPermissions.tryGet(roleId, permissionId) and not saveData["col1"]:
        if not saveData["col1"]:
            if rolesPermissions.canDelete():
                rolesPermissions.delete()
            else:
                context.error(u"Недостаточно прав для данной операции!")
    else:
        if saveData["col1"]:
            rolesPermissions.roleid = roleId
            rolesPermissions.permissionId = permissionId
            if rolesPermissions.canInsert():
                rolesPermissions.insert()
            else:
                context.error(u"Недостаточно прав для данной операции!")
    res = GridSaveResult()
    res.setRefreshAfterSave(0)
    return res
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()
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()
예제 #5
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()
예제 #6
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
예제 #7
0
def gridData(context,
             main=None,
             add=None,
             filterinfo=None,
             session=None,
             elementId=None,
             sortColumnList=None,
             firstrecord=None,
             pagesize=None):
    u'''Функция получения данных для грида. '''

    # Создание экземпляра курсора разрешения
    roles = RolesCursor(context)
    rolesPermissions = rolesCustomPermsCursor(context)
    if 'currentRecordId' in session:
        currId = json.loads(session)['sessioncontext']['related'][
            'gridContext']['currentRecordId']
        rolesPermissions.setRange("permissionId", currId)

    roles.orderBy("id")
    # Определяем переменную для JSON данных

    data = {"records": {"rec": []}}
    _header = {
        "id": ["~~id"],
        "roleId": [u"Роль"],
        "description": [u"Описание"],
        "exists": [u" "],
        "properties": [u"properties"]
    }

    for column in _header:
        _header[column].append(toHexForXml(_header[column][0]))

    # Считываем параметры сортировки
    if sortColumnList:
        sortName = sortColumnList[0].id
        sortType = unicode(sortColumnList[0].sorting).lower()
    else:
        sortName = None
    # Проходим по таблице и заполняем data
    if roles.tryFindSet():
        while True:
            permDict = {}
            permDict[_header["id"][1]] = json.dumps({
                "permission": currId,
                "role": roles.id
            })
            permDict[_header["roleId"][1]] = roles.id
            permDict[_header["description"][1]] = roles.description
            rolesPermissions.setRange("roleid", roles.id)
            permDict[_header["exists"][1]] = rolesPermissions.count(
            ) > 0 if rolesPermissions.count() else ''
            permDict[_header["properties"][1]] = {
                "event": {
                    "@name": "row_single_click",
                    "action": {
                        "#sorted": [{
                            "main_context": 'current'
                        }, {
                            "datapanel": {
                                '@type': "current",
                                '@tab': "current"
                            }
                        }]
                    }
                }
            }

            data["records"]["rec"].append(permDict)
            if not roles.nextInSet():
                break

    for column in _header:
        if sortName == _header[column][0]:
            keyField = column if sortName else 'exists'
            data["records"]["rec"].sort(key=lambda x:
                                        (x[_header["%s" % keyField][1]]),
                                        reverse=(sortType == 'desc'))
            data["records"]["rec"] = data["records"]["rec"][firstrecord -
                                                            1:firstrecord - 1 +
                                                            pagesize]
    res = XMLJSONConverter.jsonToXml(json.dumps(data))
    return JythonDTO(res, None)
예제 #8
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  
def rolesPermissionsUpload(context, main=None, add=None, filterinfo=None, session=None, elementId=None, data=None, fileName=None, file=None):
    rolesCustomPerms = rolesCustomPermsCursor(context)
    tableUpload(rolesCustomPerms, file)
    return context.message(u"Данные успешно загружены в таблицу")
def rolesPermissionsDownload(context, main=None, add=None, filterinfo=None, session=None, elementId=None, data=None):
    rolesCustomPerms = rolesCustomPermsCursor(context)
    fileName = 'rolesCustomPermissions'
    return tableDownload(rolesCustomPerms, fileName)