1010 - Watcher: Redis-based watcher for real-time policy updates
1111
1212Usage:
13- from openedx_authz.engine.enforcer import enforcer
13+ from openedx_authz.engine.enforcer import AuthzEnforcer
1414 allowed = enforcer.enforce(user, resource, action)
1515
1616Requires `CASBIN_MODEL` setting and Redis configuration for watcher functionality.
@@ -33,17 +33,33 @@ class AuthzEnforcer:
3333
3434 Ensures a single enforcer instance is created safely and configured with the
3535 ExtendedAdapter and Redis watcher for policy management and synchronization.
36+
37+ Usage:
38+ enforcer = AuthzEnforcer.get_enforcer()
39+ allowed = enforcer.enforce(user, resource, action)
3640 """
3741
38- enforcer = None
42+ _enforcer = None
3943
4044 def __new__ (cls ):
4145 """Singleton pattern to ensure a single enforcer instance."""
42- if cls .enforcer is None :
43- cls .enforcer = cls .initialize_enforcer ()
44- return cls .enforcer
46+ if cls ._enforcer is None :
47+ cls ._enforcer = cls ._initialize_enforcer ()
48+ return cls ._enforcer
49+
50+ @classmethod
51+ def get_enforcer (cls ) -> FastEnforcer :
52+ """Get the enforcer instance, creating it if needed.
53+
54+ Returns:
55+ FastEnforcer: The singleton enforcer instance.
56+ """
57+ if cls ._enforcer is None :
58+ cls ._enforcer = cls ._initialize_enforcer ()
59+ return cls ._enforcer
4560
46- def initialize_enforcer (self ) -> FastEnforcer :
61+ @staticmethod
62+ def _initialize_enforcer () -> FastEnforcer :
4763 """
4864 Create and configure the Casbin FastEnforcer instance.
4965
0 commit comments