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 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()
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 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)
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)