Update permission service cache when roles for member changed
Some checks failed
Deploy staging on push / build-bot (push) Has been cancelled
Deploy staging on push / build-web (push) Has been cancelled
Deploy staging on push / deploy (push) Has been cancelled
Deploy staging on push / pre-build (push) Has been cancelled

This commit is contained in:
Sven Heidemann 2024-02-05 22:55:52 +01:00
parent 3c21b68b0c
commit 2ff24261a8
12 changed files with 46 additions and 20 deletions

View File

@ -15,7 +15,7 @@ from bot_core.service.client_utils_service import ClientUtilsService
from bot_core.service.config_service import ConfigService from bot_core.service.config_service import ConfigService
from bot_core.service.data_integrity_service import DataIntegrityService from bot_core.service.data_integrity_service import DataIntegrityService
from bot_core.service.message_service import MessageService from bot_core.service.message_service import MessageService
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
class CoreModule(ModuleABC): class CoreModule(ModuleABC):
@ -30,7 +30,7 @@ class CoreModule(ModuleABC):
services.add_transient(MessageServiceABC, MessageService) services.add_transient(MessageServiceABC, MessageService)
services.add_transient(ClientUtilsABC, ClientUtilsService) services.add_transient(ClientUtilsABC, ClientUtilsService)
services.add_transient(DataIntegrityService) services.add_transient(DataIntegrityService)
services.add_singleton(PermissionServiceABC, PermissionService) services.add_singleton(PermissionServiceABC, PermissionServiceWithCache)
# pipes # pipes
services.add_transient(DateTimeOffsetPipe) services.add_transient(DateTimeOffsetPipe)

View File

@ -12,7 +12,7 @@ from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
from bot_core.abc.permission_service_abc import PermissionServiceABC from bot_core.abc.permission_service_abc import PermissionServiceABC
class PermissionService(PermissionServiceABC): class PermissionServiceWithCache(PermissionServiceABC):
def __init__( def __init__(
self, self,
logger: LoggerABC, logger: LoggerABC,

View File

@ -12,7 +12,7 @@ from bot_core.exception.service_exception import ServiceException
from bot_api.route.route import Route from bot_api.route.route import Route
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
from bot_core.environment_variables import MAINTENANCE from bot_core.environment_variables import MAINTENANCE
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
from bot_data.model.achievement import Achievement from bot_data.model.achievement import Achievement
from bot_data.model.auth_role_enum import AuthRoleEnum from bot_data.model.auth_role_enum import AuthRoleEnum
from bot_data.model.auth_user import AuthUser from bot_data.model.auth_user import AuthUser
@ -82,7 +82,7 @@ class QueryABC(ObjectType):
return config return config
services = get_services() services = get_services()
permissions: PermissionService = services.get_service(PermissionService) permissions: PermissionServiceWithCache = services.get_service(PermissionServiceWithCache)
bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC) bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
config = get_config() config = get_config()
@ -245,7 +245,7 @@ class QueryABC(ObjectType):
def _can_user_mutate_data( def _can_user_mutate_data(
self, server: Server, permission: UserRoleEnum, services: ServiceProviderABC, config: ConfigurationABC self, server: Server, permission: UserRoleEnum, services: ServiceProviderABC, config: ConfigurationABC
): ):
permissions: PermissionService = services.get_service(PermissionService) permissions: PermissionServiceWithCache = services.get_service(PermissionServiceWithCache)
bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC) bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
auth_user = Route.get_user() auth_user = Route.get_user()

View File

@ -6,7 +6,7 @@ from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.model.achievement import Achievement from bot_data.model.achievement import Achievement
from bot_data.model.user_role_enum import UserRoleEnum from bot_data.model.user_role_enum import UserRoleEnum
from bot_graphql.abc.query_abc import QueryABC from bot_graphql.abc.query_abc import QueryABC
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
class AchievementMutation(QueryABC): class AchievementMutation(QueryABC):
@ -16,7 +16,7 @@ class AchievementMutation(QueryABC):
achievements: AchievementRepositoryABC, achievements: AchievementRepositoryABC,
bot: DiscordBotServiceABC, bot: DiscordBotServiceABC,
db: DatabaseContextABC, db: DatabaseContextABC,
permissions: PermissionService, permissions: PermissionServiceWithCache,
): ):
QueryABC.__init__(self, "AchievementMutation") QueryABC.__init__(self, "AchievementMutation")

View File

@ -10,7 +10,7 @@ from bot_data.model.scheduled_event import ScheduledEvent
from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum
from bot_data.model.user_role_enum import UserRoleEnum from bot_data.model.user_role_enum import UserRoleEnum
from bot_graphql.abc.query_abc import QueryABC from bot_graphql.abc.query_abc import QueryABC
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
class ScheduledEventMutation(QueryABC): class ScheduledEventMutation(QueryABC):
@ -20,7 +20,7 @@ class ScheduledEventMutation(QueryABC):
scheduled_events: ScheduledEventRepositoryABC, scheduled_events: ScheduledEventRepositoryABC,
bot: DiscordBotServiceABC, bot: DiscordBotServiceABC,
db: DatabaseContextABC, db: DatabaseContextABC,
permissions: PermissionService, permissions: PermissionServiceWithCache,
): ):
QueryABC.__init__(self, "ScheduledEventMutation") QueryABC.__init__(self, "ScheduledEventMutation")

View File

@ -13,7 +13,7 @@ from bot_data.model.server_team_role_ids_config import ServerTeamRoleIdsConfig
from bot_data.model.team_member_type_enum import TeamMemberTypeEnum from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
from bot_data.model.user_role_enum import UserRoleEnum from bot_data.model.user_role_enum import UserRoleEnum
from bot_graphql.abc.query_abc import QueryABC from bot_graphql.abc.query_abc import QueryABC
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
class ServerConfigMutation(QueryABC): class ServerConfigMutation(QueryABC):
@ -25,7 +25,7 @@ class ServerConfigMutation(QueryABC):
server_configs: ServerConfigRepositoryABC, server_configs: ServerConfigRepositoryABC,
db: DatabaseContextABC, db: DatabaseContextABC,
config_service: ConfigService, config_service: ConfigService,
permissions: PermissionService, permissions: PermissionServiceWithCache,
): ):
QueryABC.__init__(self, "ServerConfigMutation") QueryABC.__init__(self, "ServerConfigMutation")

View File

@ -6,7 +6,7 @@ from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryA
from bot_data.model.short_role_name import ShortRoleName from bot_data.model.short_role_name import ShortRoleName
from bot_data.model.user_role_enum import UserRoleEnum from bot_data.model.user_role_enum import UserRoleEnum
from bot_graphql.abc.query_abc import QueryABC from bot_graphql.abc.query_abc import QueryABC
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
from modules.short_role_name.service.short_role_name_service import ShortRoleNameService from modules.short_role_name.service.short_role_name_service import ShortRoleNameService
@ -17,7 +17,7 @@ class ShortRoleNameMutation(QueryABC):
short_role_names: ShortRoleNameRepositoryABC, short_role_names: ShortRoleNameRepositoryABC,
bot: DiscordBotServiceABC, bot: DiscordBotServiceABC,
db: DatabaseContextABC, db: DatabaseContextABC,
permissions: PermissionService, permissions: PermissionServiceWithCache,
short_role_name_service: ShortRoleNameService, short_role_name_service: ShortRoleNameService,
): ):
QueryABC.__init__(self, "ShortRoleNameMutation") QueryABC.__init__(self, "ShortRoleNameMutation")

View File

@ -16,7 +16,7 @@ from bot_data.model.technician_ping_url_config import TechnicianPingUrlConfig
from bot_data.model.user_role_enum import UserRoleEnum from bot_data.model.user_role_enum import UserRoleEnum
from bot_data.service.technician_config_seeder import TechnicianConfigSeeder from bot_data.service.technician_config_seeder import TechnicianConfigSeeder
from bot_graphql.abc.query_abc import QueryABC from bot_graphql.abc.query_abc import QueryABC
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
class TechnicianConfigMutation(QueryABC): class TechnicianConfigMutation(QueryABC):
@ -31,7 +31,7 @@ class TechnicianConfigMutation(QueryABC):
config_service: ConfigService, config_service: ConfigService,
tech_seeder: TechnicianConfigSeeder, tech_seeder: TechnicianConfigSeeder,
client_utils: ClientUtilsABC, client_utils: ClientUtilsABC,
permissions: PermissionService, permissions: PermissionServiceWithCache,
): ):
QueryABC.__init__(self, "TechnicianConfigMutation") QueryABC.__init__(self, "TechnicianConfigMutation")

View File

@ -11,7 +11,7 @@ from flask import request
from bot_api.configuration.authentication_settings import AuthenticationSettings from bot_api.configuration.authentication_settings import AuthenticationSettings
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC
@ -40,7 +40,7 @@ class UserJoinedGameServerMutation(QueryABC):
user_game_idents: UserGameIdentRepositoryABC, user_game_idents: UserGameIdentRepositoryABC,
bot: DiscordBotServiceABC, bot: DiscordBotServiceABC,
db: DatabaseContextABC, db: DatabaseContextABC,
permissions: PermissionService, permissions: PermissionServiceWithCache,
auth_settings: AuthenticationSettings, auth_settings: AuthenticationSettings,
): ):
QueryABC.__init__(self, "UserJoinedGameServerMutation") QueryABC.__init__(self, "UserJoinedGameServerMutation")

View File

@ -4,7 +4,7 @@ from cpl_core.database.context import DatabaseContextABC
from cpl_discord.service import DiscordBotServiceABC from cpl_discord.service import DiscordBotServiceABC
from bot_api.route.route import Route from bot_api.route.route import Route
from bot_core.service.permission_service import PermissionService from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
from bot_data.abc.level_repository_abc import LevelRepositoryABC from bot_data.abc.level_repository_abc import LevelRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.user_repository_abc import UserRepositoryABC from bot_data.abc.user_repository_abc import UserRepositoryABC
@ -23,7 +23,7 @@ class UserMutation(QueryABC):
users: UserRepositoryABC, users: UserRepositoryABC,
bot: DiscordBotServiceABC, bot: DiscordBotServiceABC,
db: DatabaseContextABC, db: DatabaseContextABC,
permissions: PermissionService, permissions: PermissionServiceWithCache,
levels: LevelRepositoryABC, levels: LevelRepositoryABC,
level_service: LevelService, level_service: LevelService,
user_warnings: UserWarningsRepositoryABC, user_warnings: UserWarningsRepositoryABC,

View File

@ -8,6 +8,7 @@ from bot_core.abc.module_abc import ModuleABC
from bot_core.abc.task_abc import TaskABC from bot_core.abc.task_abc import TaskABC
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
from modules.base.command.scheduled_events_group import ScheduledEventsCommand from modules.base.command.scheduled_events_group import ScheduledEventsCommand
from modules.base.events.base_on_member_update_event import BaseOnMemberUpdateEvent
from modules.base.tasks.birthday_watcher import BirthdayWatcher from modules.base.tasks.birthday_watcher import BirthdayWatcher
from modules.base.command.afk_command import AFKCommand from modules.base.command.afk_command import AFKCommand
from modules.base.command.game_server_group import GameServerGroup from modules.base.command.game_server_group import GameServerGroup
@ -117,3 +118,4 @@ class BaseModule(ModuleABC):
DiscordEventTypesEnum.on_guild_join.value, DiscordEventTypesEnum.on_guild_join.value,
BaseOnGuildJoinEvent, BaseOnGuildJoinEvent,
) )
services.add_transient(DiscordEventTypesEnum.on_member_update.value, BaseOnMemberUpdateEvent)

View File

@ -0,0 +1,24 @@
import discord
from cpl_core.logging import LoggerABC
from cpl_discord.events import OnMemberUpdateABC
from cpl_discord.service import DiscordBotServiceABC
from bot_core.service.permission_service_with_cache import PermissionServiceWithCache
class BaseOnMemberUpdateEvent(OnMemberUpdateABC):
def __init__(
self,
logger: LoggerABC,
bot: DiscordBotServiceABC,
permissions: PermissionServiceWithCache,
):
OnMemberUpdateABC.__init__(self)
self._logger = logger
self._bot = bot
self._permissions = permissions
async def on_member_update(self, before: discord.member.Member, after: discord.member.Member):
if before.roles != after.roles:
self._permissions.reset_cache()