Browse Source

Авторизация пользователей #9

1. Загрузка документов и чека об оплате ЧВ
2. Заказы доступны только для авторизованных
auth_koop
Alexei 2 years ago
parent
commit
423acd9fad
  1. 42
      bot_modules/authorize.py
  2. 2
      bot_modules/orders.py
  3. 1
      bot_sys/bd_table.py
  4. 2
      bot_sys/user_access.py

42
bot_modules/authorize.py

@ -22,6 +22,8 @@ user_birthday_field = 'userBirthday'
user_address_field = 'userAddress'
user_contacts_field = 'userContacts'
user_confirm_field = 'userConfirm'
user_auth_docs_field = 'authDocs'
user_photo_pay_field = 'photoPay'
access_field = 'authorizeAccess'
create_datetime_field = 'authorizeCreateDateTime'
@ -40,6 +42,8 @@ table = bd_table.Table(table_name, [
bd_table.TableField(user_address_field, bd_table.TableFieldDestiny.USER_ADDRESS, bd_table.TableFieldType.STR),
bd_table.TableField(user_contacts_field, bd_table.TableFieldDestiny.USER_CONTACTS, bd_table.TableFieldType.STR),
bd_table.TableField(user_confirm_field, bd_table.TableFieldDestiny.USER_CONFIRM, bd_table.TableFieldType.ENUM, a_Enum = ConfirmStatus),
bd_table.TableField(user_auth_docs_field, bd_table.TableFieldDestiny.AUTH_PHOTO_DOCS, bd_table.TableFieldType.PHOTO),
bd_table.TableField(user_photo_pay_field, bd_table.TableFieldDestiny.PHOTO_PAY, bd_table.TableFieldType.PHOTO),
bd_table.TableField(access_field, bd_table.TableFieldDestiny.ACCESS, bd_table.TableFieldType.STR),
bd_table.TableField(create_datetime_field, bd_table.TableFieldDestiny.CREATE_DATE, bd_table.TableFieldType.STR),
]
@ -49,13 +53,11 @@ table = bd_table.Table(table_name, [
]
)
init_access = f'{user_access.user_access_group_new}=va'
init_access = f'{user_access.user_access_group_new}=vea'
def_init_access = f'{user_access.user_access_group_new}=a'
g_group_auth_name = 'authorize_users'
def GetAuthorizeItem(a_Bot, a_UserID):
items = bd_item.GetBDItemsTemplate(a_Bot, table_name, user_id_field)(a_UserID)
print('GetAuthorizeItem', items)
if len(items) == 1:
return items[0]
return None
@ -82,6 +84,9 @@ button_names = {
mod_table_operate.EditButton(bd_table.TableFieldDestiny.USER_CONFIRM): "☐ Изменить подтверждение пользователя",
mod_table_operate.EditButton(bd_table.TableFieldDestiny.USER_ID): "☐ Изменить id пользователя",
mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Доступ к авторизации пользователя",
mod_table_operate.EditButton(bd_table.TableFieldDestiny.AUTH_PHOTO_DOCS): "☐ Загрузить подписанные документы",
mod_table_operate.EditButton(bd_table.TableFieldDestiny.PHOTO_PAY): "☐ Оплатить членский взнос",
mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Доступ к авторизации пользователя",
mod_table_operate.ButtonNames.DEL: "❌ Удалить авторизацию пользователя",
mod_table_operate.EnumButton(ConfirmStatus.YES): "Да, все данные верны",
mod_table_operate.EnumButton(ConfirmStatus.NO): "Нет, данные не верны",
@ -214,6 +219,12 @@ messages = {
Введите новое подтверждение пользователя:
''',
mod_table_operate.EditMessage(bd_table.TableFieldDestiny.AUTH_PHOTO_DOCS): f'''
Загрузите подписанный документ:
''',
mod_table_operate.EditMessage(bd_table.TableFieldDestiny.PHOTO_PAY): f'''
Загрузите чек по оплате ЧВ:
''',
mod_table_operate.EditMessage(bd_table.TableFieldDestiny.ACCESS): f'''
Текущий доступ к проекту:
#{access_field}
@ -222,7 +233,7 @@ messages = {
Введите новую строку доступа:
''',
mod_table_operate.Messages.SUCCESS_EDIT: '''Проект успешно отредактирован!''',
mod_table_operate.Messages.SUCCESS_EDIT: '''Данные успешно отредактированы!''',
mod_table_operate.Messages.SELECT_TO_DELETE: '''
Выберите пользователя, у которого вы хотите удалить авторизованные данные.
''',
@ -264,6 +275,8 @@ class ModuleAuthorize(mod_table_operate.TableOperateModule):
bd_table.TableFieldDestiny.USER_CONTACTS: user_access.AccessMode.NONE,
bd_table.TableFieldDestiny.USER_CONFIRM: user_access.AccessMode.NONE,
bd_table.TableFieldDestiny.ACCESS: user_access.AccessMode.NONE,
bd_table.TableFieldDestiny.AUTH_PHOTO_DOCS: user_access.AccessMode.ADD,
bd_table.TableFieldDestiny.PHOTO_PAY: user_access.AccessMode.ADD,
}
return cur_dict.get(a_Field.m_Destiny, super().GetAccessForEditKeyboardButtons(a_Field))
@ -281,6 +294,17 @@ class ModuleAuthorize(mod_table_operate.TableOperateModule):
a_Item[key_name_id],\
a_Item[access_field_id]
async def OnChangeField(self, a_Field, a_ItemID, a_ItemData, a_EditUserID):
super().OnChangeField(a_Field, a_ItemID, a_ItemData, a_EditUserID)
user_id_field_name = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.USER_ID)
user_id = a_ItemData[user_id_field_name]
user_confirm_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.USER_CONFIRM)
auth_docs_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.AUTH_PHOTO_DOCS)
pay_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.PHOTO_PAY)
item = GetAuthorizeItem(self.m_Bot, user_id)
if item and item[user_confirm_field_id] != '' and item[auth_docs_field_id] != '' and item[pay_field_id] != '':
users_groups_agregator.AddUserInGroup(self.m_Bot, user_id, user_access.user_access_group_auth_users)
def GetStartButtons(self, a_Message, a_UserGroups):
user_id = str(a_Message.from_user.id)
item = GetAuthorizeItem(self.m_Bot, user_id)
@ -290,6 +314,8 @@ class ModuleAuthorize(mod_table_operate.TableOperateModule):
if item and item[user_confirm_field_id] == self.GetMessage(mod_table_operate.EnumMessageForView(ConfirmStatus.YES)).GetDesc():
cur_buttons += [[ButtonNames.LIST_AUTH_DOCS, user_access.AccessMode.VIEW]]
cur_buttons += [[mod_table_operate.EditButton(bd_table.TableFieldDestiny.AUTH_PHOTO_DOCS), user_access.AccessMode.VIEW]]
cur_buttons += [[mod_table_operate.EditButton(bd_table.TableFieldDestiny.PHOTO_PAY), user_access.AccessMode.VIEW]]
else:
cur_buttons += [[mod_table_operate.ButtonNames.ADD, user_access.AccessMode.ADD]]
@ -308,7 +334,7 @@ class ModuleAuthorize(mod_table_operate.TableOperateModule):
result = {}
for f in files:
result.update({f: cur_dict})
print(cur_dict)
return result
button_name = self.GetButton(ButtonNames.LIST_AUTH_DOCS)
@ -329,9 +355,9 @@ class ModuleAuthorize(mod_table_operate.TableOperateModule):
def AddBDItemFunc(self, a_ItemData, a_UserID):
a_ItemData[user_id_field] = a_UserID
#a_ItemData[address_field] = ''
a_ItemData[user_auth_docs_field] = ''
a_ItemData[user_photo_pay_field] = ''
result = super().AddBDItemFunc(a_ItemData, a_UserID)
users_groups_agregator.AddUserInGroup(self.m_Bot, a_UserID, g_group_auth_name)
return result
def GetKeyFieldDestiny(self):
@ -339,7 +365,7 @@ class ModuleAuthorize(mod_table_operate.TableOperateModule):
def GetInitBDCommands(self):
return super(). GetInitBDCommands() + [
groups_utils.CreateGroupRequest(g_group_auth_name)
groups_utils.CreateGroupRequest(user_access.user_access_group_auth_users)
]
def GetReplaceDictFunc(a_Bot, a_user_id):

2
bot_modules/orders.py

@ -45,7 +45,7 @@ table = bd_table.Table(table_name, [
bd_table.TableField(parent_id_field, bd_table.TableFieldDestiny.PARENT_ID, bd_table.TableFieldType.INT),
])
init_access = f'{user_access.user_access_group_new}=vea'
init_access = f'{user_access.user_access_group_auth_users}=vea'
# ---------------------------------------------------------
# Сообщения и кнопки

1
bot_sys/bd_table.py

@ -46,6 +46,7 @@ class TableFieldDestiny(Enum):
USER_ADDRESS = auto() # Адресс
USER_CONTACTS = auto() # контакты
USER_CONFIRM = auto() # подтверждение
AUTH_PHOTO_DOCS = auto()
class TableField:
def __init__(self, a_Name, a_Destiny : TableFieldDestiny, a_Type : TableFieldType, a_Enum = None):

2
bot_sys/user_access.py

@ -8,6 +8,7 @@ from bot_sys import config
user_access_group_all = 'all'
user_access_group_new = 'new'
user_access_group_auth_users = 'authorize_users'
user_access_readme = f'''
Доступ к пользователям задаётся в виде строки
@ -57,6 +58,7 @@ def CheckAccessItem(a_AccessItem : str, a_AccessMode : AccessMode):
# Возвращает возможность доступа пользователю a_UserGroups в элемент с правами a_AccessValue по режиму доступа a_AccessMode
def CheckAccess(a_RootIDs, a_AccessValue : str, a_UserGroups : UserGroups, a_AccessMode : AccessMode):
#print(a_RootIDs, a_AccessValue, a_UserGroups, a_AccessMode)
if a_UserGroups.user_id in a_RootIDs:
return True
for i in a_AccessValue.split(';'):

Loading…
Cancel
Save