Browse Source

Доступ к модулям

test_bot
Alexei 2 years ago
parent
commit
04baae3382
  1. 88
      bot_modules/access.py
  2. 60
      bot_modules/projects.py
  3. 2
      bot_sys/bot_bd.py

88
bot_modules/access.py

@ -5,28 +5,43 @@
from bot_sys import bot_bd, log, config, keyboard, user_access from bot_sys import bot_bd, log, config, keyboard, user_access
from bot_modules import start, groups from bot_modules import start, groups
from template import simple_message, sql_request from template import simple_message, sql_request, bd_item_edit, bd_item
from aiogram.dispatcher import FSMContext from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import Dispatcher from aiogram.dispatcher import Dispatcher
from aiogram import types
class FSMRequestToBDAccess(StatesGroup): class FSMRequestToBDAccess(StatesGroup):
sqlRequest = State() sqlRequest = State()
class FSMEditAccessItem(StatesGroup):
item_id = State()
item_field = State()
class FSMEditDefaultAccessItem(StatesGroup):
item_id = State()
item_field = State()
# --------------------------------------------------------- # ---------------------------------------------------------
# БД # БД
module_name = 'access' module_name = 'access'
table_name = 'module_access' table_name = 'module_access'
mod_name_field = 'modName'
moduleaccess_field = 'modAccess'
mod_default_access_field = 'itemDefaultAccess'
#TODO: Автоматическое создание init_bd_cmds, необходимо table_name, mod_name_field ... объединить в объект
init_bd_cmds = [f"""CREATE TABLE IF NOT EXISTS {table_name}( init_bd_cmds = [f"""CREATE TABLE IF NOT EXISTS {table_name}(
modName TEXT, {mod_name_field} TEXT,
modAccess TEXT, {moduleaccess_field} TEXT,
itemDefaultAccess TEXT, {mod_default_access_field} TEXT,
UNIQUE(modName) UNIQUE({mod_name_field})
);""", );""",
f"INSERT OR IGNORE INTO {table_name} (modName, modAccess, itemDefaultAccess) VALUES ('{module_name}', '{user_access.user_access_group_new}=-', '{user_access.user_access_group_new}=-');" f"INSERT OR IGNORE INTO {table_name} ({mod_name_field}, {moduleaccess_field}, {mod_default_access_field}) VALUES ('{module_name}', '{user_access.user_access_group_new}=-', '{user_access.user_access_group_new}=-');"
] ]
# --------------------------------------------------------- # ---------------------------------------------------------
@ -63,12 +78,42 @@ access_button_name = "⛀ Доступ пользователей"
sql_request_button_name = "⛁ Запрос к БД для редактирования доступа" sql_request_button_name = "⛁ Запрос к БД для редактирования доступа"
help_button_name = "📄 Информация по редактированию доступа" help_button_name = "📄 Информация по редактированию доступа"
# Редактирование доступа.
moduleaccess_select_to_edit_message = '''
Выберите модуль, который вы хотите отредактировать.
'''
edit_moduleaccess_access_button_name = "◇ Изменить доступ к модулю"
moduleaccess_edit_access_message = f'''
Текущий доступ к модулю #{mod_name_field}:
#{moduleaccess_field}
{user_access.user_access_readme}
Введите новую строку доступа:
'''
edit_moduleaccess_default_access_button_name = "◈ Изменить доступ по умолчанию к модулю "
moduleaccess_edit_default_access_message = f'''
Текущий доступ по умолчанию к модулю #{mod_name_field}:
#{mod_default_access_field}
{user_access.user_access_readme}
Введите новую строку доступа:
'''
moduleaccess_success_edit_message = '''✅ Проект успешно отредактирован!'''
# --------------------------------------------------------- # ---------------------------------------------------------
# Работа с кнопками # Работа с кнопками
def GetEditAccessKeyboardButtons(a_UserGroups): def GetEditAccessKeyboardButtons(a_UserGroups):
cur_buttons = [ cur_buttons = [
keyboard.ButtonWithAccess(sql_request_button_name, user_access.AccessMode.ACCEES_EDIT, GetAccess()), keyboard.ButtonWithAccess(sql_request_button_name, user_access.AccessMode.ACCEES_EDIT, GetAccess()),
keyboard.ButtonWithAccess(edit_moduleaccess_access_button_name, user_access.AccessMode.ACCEES_EDIT, GetAccess()),
keyboard.ButtonWithAccess(edit_moduleaccess_default_access_button_name, user_access.AccessMode.ACCEES_EDIT, GetAccess()),
keyboard.ButtonWithAccess(help_button_name, user_access.AccessMode.VIEW, GetAccess()) keyboard.ButtonWithAccess(help_button_name, user_access.AccessMode.VIEW, GetAccess())
] ]
mods = [start] mods = [start]
@ -77,6 +122,27 @@ def GetEditAccessKeyboardButtons(a_UserGroups):
# --------------------------------------------------------- # ---------------------------------------------------------
# Обработка сообщений # Обработка сообщений
def GetButtonNameAndKeyValueAndAccess(a_Item):
# ButtonName KeyValue Access
return a_Item[0], a_Item[0], a_Item[1]
def ShowMessageTemplate(a_StringMessage):
async def ShowMessage(a_CallbackQuery : types.CallbackQuery, a_Item):
if (len(a_Item) < 3):
return simple_message.WorkFuncResult(error_find_proj_message)
msg = a_StringMessage.\
replace(f'#{mod_name_field}', a_Item[0]).\
replace(f'#{moduleaccess_field}', a_Item[1]).\
replace(f'#{mod_default_access_field}', a_Item[2])
return simple_message.WorkFuncResult(msg, item_access = a_Item[1])
return ShowMessage
def SimpleMessageTemplate(a_StringMessage):
async def ShowMessage(a_CallbackQuery : types.CallbackQuery):
return simple_message.WorkFuncResult(a_StringMessage)
return ShowMessage
# --------------------------------------------------------- # ---------------------------------------------------------
# Работа с базой данных # Работа с базой данных
@ -113,7 +179,11 @@ def GetModuleButtons():
# Обработка кнопок # Обработка кнопок
def RegisterHandlers(dp : Dispatcher): def RegisterHandlers(dp : Dispatcher):
dp.register_message_handler(simple_message.InfoMessageTemplate(access_start_message, GetEditAccessKeyboardButtons, GetAccess), text = access_button_name) defaul_keyboard_func = GetEditAccessKeyboardButtons
dp.register_message_handler(simple_message.InfoMessageTemplate(help_message, GetEditAccessKeyboardButtons, GetAccess), text = help_button_name) dp.register_message_handler(simple_message.InfoMessageTemplate(access_start_message, defaul_keyboard_func, GetAccess), text = access_button_name)
dp.register_message_handler(simple_message.InfoMessageTemplate(help_message, defaul_keyboard_func, GetAccess), text = help_button_name)
sql_request.RequestToBDRegisterHandlers(dp, sql_request_button_name, request_start_message, FSMRequestToBDAccess, defaul_keyboard_func, user_access.AccessMode.ACCEES_EDIT, GetAccess)
sql_request.RequestToBDRegisterHandlers(dp, sql_request_button_name, request_start_message, FSMRequestToBDAccess, GetEditAccessKeyboardButtons, user_access.AccessMode.ACCEES_EDIT, GetAccess) bd_item_edit.EditBDItemRegisterHandlers(dp, FSMEditAccessItem, edit_moduleaccess_access_button_name, moduleaccess_select_to_edit_message, ShowMessageTemplate(moduleaccess_edit_access_message), ShowMessageTemplate(moduleaccess_success_edit_message), table_name, mod_name_field, moduleaccess_field, GetButtonNameAndKeyValueAndAccess, GetAccess, defaul_keyboard_func, access_mode = user_access.AccessMode.ACCEES_EDIT, field_type = bd_item.FieldType.text)
bd_item_edit.EditBDItemRegisterHandlers(dp, FSMEditDefaultAccessItem, edit_moduleaccess_default_access_button_name, moduleaccess_select_to_edit_message, ShowMessageTemplate(moduleaccess_edit_default_access_message), ShowMessageTemplate(moduleaccess_success_edit_message), table_name, mod_name_field, mod_default_access_field, GetButtonNameAndKeyValueAndAccess, GetAccess, defaul_keyboard_func, access_mode = user_access.AccessMode.ACCEES_EDIT, field_type = bd_item.FieldType.text)

60
bot_modules/projects.py

@ -60,11 +60,13 @@ f"INSERT OR IGNORE INTO module_access (modName, modAccess, itemDefaultAccess) VA
# --------------------------------------------------------- # ---------------------------------------------------------
# Сообщения # Сообщения
projects_button_name = "🟥 Проекты"
base_project_message = ''' base_project_message = '''
<b>🟥 Проекты</b> <b>🟥 Проекты</b>
''' '''
list_project_button_name = "📃 Список проектов"
select_project_message = ''' select_project_message = '''
Пожалуйста, выберите проект: Пожалуйста, выберите проект:
''' '''
@ -81,6 +83,9 @@ project_open_message = f'''
Время создания: #{create_datetime_field} Время создания: #{create_datetime_field}
''' '''
# Создание проекта
add_project_button_name = "✅ Добавить проект"
project_create_name_message = ''' project_create_name_message = '''
Создание проекта. Шаг 1 Создание проекта. Шаг 1
@ -101,20 +106,25 @@ project_create_photo_message = '''
''' '''
project_success_create_message = '''✅ Проект успешно добавлен!''' project_success_create_message = '''✅ Проект успешно добавлен!'''
project_success_delete_message = '''✅ Проект успешно удалён!'''
project_success_edit_message = '''✅ Проект успешно отредактирован!'''
# Редактирование проекта. # Редактирование проекта.
edit_project_button_name = "🛠 Редактировать проект"
project_start_edit_message= ''' project_start_edit_message= '''
Пожалуйста, выберите действие: Пожалуйста, выберите действие:
''' '''
project_select_to_edit_message = '''
Выберите проект, который вы хотите отредактировать.
'''
edit_project_photo_button_name = "☐ Изменить изображение"
project_edit_photo_message = ''' project_edit_photo_message = '''
Загрузите новую обложку для проекта (Фото): Загрузите новую обложку для проекта (Фото):
Она будет отображаться в его описании. Она будет отображаться в его описании.
''' '''
edit_project_name_button_name = "≂ Изменить название"
project_edit_name_message = f''' project_edit_name_message = f'''
Текущее название проекта: Текущее название проекта:
#{name_field} #{name_field}
@ -122,6 +132,7 @@ project_edit_name_message = f'''
Введите новое название проекта: Введите новое название проекта:
''' '''
edit_project_desc_button_name = "𝌴 Изменить описание"
project_edit_desc_message = f''' project_edit_desc_message = f'''
Текущее описание проекта: Текущее описание проекта:
#{desc_field} #{desc_field}
@ -129,35 +140,27 @@ project_edit_desc_message = f'''
Введите новое описание проекта: Введите новое описание проекта:
''' '''
edit_project_access_button_name = "✋ Изменить доступ"
project_edit_access_message = f''' project_edit_access_message = f'''
Текущий доступ к проекту: Текущий доступ к проекту:
#{access_field} #{access_field}
{user_access.user_access_readme} {user_access.user_access_readme}
Введите новое описание проекта: Введите новую строку доступа:
''' '''
project_select_to_edit_message = ''' project_success_edit_message = '''✅ Проект успешно отредактирован!'''
Выберите проект, который вы хотите отредактировать.
'''
# Удаление проекта
del_project_button_name = "❌ Удалить проект"
project_select_to_delete_message = ''' project_select_to_delete_message = '''
Выберите проект, который вы хотите удалить. Выберите проект, который вы хотите удалить.
Все задачи и потребности в этом проекте так же будут удалены! Все задачи и потребности в этом проекте так же будут удалены!
''' '''
projects_button_name = "🟥 Проекты" project_success_delete_message = '''✅ Проект успешно удалён!'''
list_project_button_name = "📃 Список проектов"
add_project_button_name = "✅ Добавить проект"
del_project_button_name = "❌ Удалить проект"
edit_project_button_name = "🛠 Редактировать проект"
edit_project_photo_button_name = "☐ Изменить изображение"
edit_project_name_button_name = "≂ Изменить название"
edit_project_desc_button_name = "𝌴 Изменить описание"
edit_project_access_button_name = "✋ Изменить доступ"
# --------------------------------------------------------- # ---------------------------------------------------------
# Работа с кнопками # Работа с кнопками
@ -199,23 +202,22 @@ def GetButtonNameAndKeyValueAndAccess(a_Item):
return a_Item[1], a_Item[0], a_Item[4] return a_Item[1], a_Item[0], a_Item[4]
def ShowMessageTemplate(a_StringMessage): def ShowMessageTemplate(a_StringMessage):
async def ShowProject(a_CallbackQuery : types.CallbackQuery, a_Item): async def ShowMessage(a_CallbackQuery : types.CallbackQuery, a_Item):
if (len(a_Item) < 6): if (len(a_Item) < 6):
return simple_message.WorkFuncResult(error_find_proj_message) return simple_message.WorkFuncResult(error_find_proj_message)
name = a_Item[1] msg = a_StringMessage.\
desc = a_Item[2] replace(f'#{name_field}', a_Item[1]).\
photo_id = a_Item[3] replace(f'#{desc_field}', a_Item[2]).\
access = a_Item[4] replace(f'#{create_datetime_field}', a_Item[5]).\
create_time = a_Item[5] replace(f'#{access_field}', a_Item[4])
msg = a_StringMessage.replace(f'#{name_field}', name).replace(f'#{desc_field}', desc).replace(f'#{create_datetime_field}', create_time).replace(f'#{access_field}', access) return simple_message.WorkFuncResult(msg, photo_id = a_Item[3], item_access = a_Item[4])
return simple_message.WorkFuncResult(msg, photo_id = photo_id, item_access = access) return ShowMessage
return ShowProject
def SimpleMessageTemplate(a_StringMessage): def SimpleMessageTemplate(a_StringMessage):
async def ShowProject(a_CallbackQuery : types.CallbackQuery): async def ShowMessage(a_CallbackQuery : types.CallbackQuery):
return simple_message.WorkFuncResult(a_StringMessage) return simple_message.WorkFuncResult(a_StringMessage)
return ShowProject return ShowMessage
# Удаление проекта # Удаление проекта
@ -235,12 +237,12 @@ async def ProjectPostDelete(a_CallbackQuery : types.CallbackQuery, a_ItemID):
def AddBDItemFunc(a_ItemData): def AddBDItemFunc(a_ItemData):
res, error = bot_bd.SQLRequestToBD(f'INSERT INTO {table_name}({photo_field}, {name_field}, {desc_field}, {access_field}, {create_datetime_field}) VALUES(?, ?, ?, ?, {bot_bd.GetBDDateTimeNow()})', res, error = bot_bd.SQLRequestToBD(f'INSERT INTO {table_name}({photo_field}, {name_field}, {desc_field}, {access_field}, {create_datetime_field}) VALUES(?, ?, ?, ?, {bot_bd.GetBDDateTimeNow()})',
commit = True, return_error = True, param = (a_ItemData[photo_field], a_ItemData[name_field], a_ItemData[desc_field], access.GetItemDefaultAccessForModule(module_name))) commit = True, return_error = True, param = (a_ItemData[photo_field], a_ItemData[name_field], a_ItemData[desc_field], access.GetItemDefaultAccessForModule(module_name)))
if error: if error:
log.Error(f'Ошибка добавления записи в таблицу {table_name} ({a_ItemData[photo_field]}, {a_ItemData[name_field]}, {a_ItemData[desc_field]}, {access.GetItemDefaultAccessForModule(module_name)}).') log.Error(f'Ошибка добавления записи в таблицу {table_name} ({a_ItemData[photo_field]}, {a_ItemData[name_field]}, {a_ItemData[desc_field]}, {access.GetItemDefaultAccessForModule(module_name)}).')
else: else:
log.Success(f'Добавлена запись в таблицу {table_name} ({a_ItemData[photo_field]}, {a_ItemData[name_field]}, {a_ItemData[desc_field]}, {access.GetItemDefaultAccessForModule(module_name)}).') log.Success(f'Добавлена запись в таблицу {table_name} ({a_ItemData[photo_field]}, {a_ItemData[name_field]}, {a_ItemData[desc_field]}, {access.GetItemDefaultAccessForModule(module_name)}).')
return res, error return res, error
# --------------------------------------------------------- # ---------------------------------------------------------

2
bot_sys/bot_bd.py

@ -46,7 +46,7 @@ def SQLRequestToBD(a_Request : str, commit = False, return_error = False, param
error = "Ошибка sqlite3:" + str(e) error = "Ошибка sqlite3:" + str(e)
cursor.close() cursor.close()
db.close() db.close()
if not error: log.Success(f'Выполнен запроса [{a_Request}]') if not error and commit: log.Success(f'Выполнен запрос [{a_Request}]')
if return_error: if return_error:
return result, error return result, error
return result return result

Loading…
Cancel
Save