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 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()
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"Недостаточно прав для данной операции!")
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()
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)))
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 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))
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)