diff --git a/rbac/init.py b/rbac/init.py index c699557..425bacc 100644 --- a/rbac/init.py +++ b/rbac/init.py @@ -107,4 +107,7 @@ def load_rbac(): env.invalidate_user_perm_cache = env.userpermissions.invalidate_user_cache env.invalidate_all_perm_caches = env.userpermissions.invalidate_all_user_caches env.invalidate_role_perm_cache = env.userpermissions.invalidate_rp_cache + # Bind hot_reload event — instance method, WeakMethod safe (stored on env) + if hasattr(env, 'event_dispatcher'): + env.event_dispatcher.bind('hot_reload', env.userpermissions.on_hot_reload) register_rbac_event_listeners() diff --git a/rbac/userperm.py b/rbac/userperm.py index aa01a70..7de84c9 100644 --- a/rbac/userperm.py +++ b/rbac/userperm.py @@ -98,6 +98,11 @@ class UserPermissions: # Async lock for rp_caches initialization (lazy init) self._rp_lock = None + def on_hot_reload(self, data=None): + """Event handler for hot_reload event. Clears all caches.""" + self.ur_caches.clear() + self.invalidate_rp_cache() + def on_user_update(self, data): """Event handler for users table update. Clears the specific user's permission cache.