11
11
from passbook .policies .struct import PolicyRequest , PolicyResult
12
12
13
13
if TYPE_CHECKING :
14
- from passbook .policies . expression . models import ExpressionPolicy
14
+ from passbook .core . models import User
15
15
16
16
17
17
class Evaluator :
@@ -21,29 +21,36 @@ class Evaluator:
21
21
22
22
def __init__ (self ):
23
23
self ._env = NativeEnvironment ()
24
- self ._env .filters ["regex_match" ] = Evaluator .jinja2_regex_match
25
- self ._env .filters ["regex_replace" ] = Evaluator .jinja2_regex_replace
24
+ # update passbook/policies/expression/templates/policy/expression/form.html
25
+ # update docs/policies/expression/index.md
26
+ self ._env .filters ["regex_match" ] = Evaluator .jinja2_filter_regex_match
27
+ self ._env .filters ["regex_replace" ] = Evaluator .jinja2_filter_regex_replace
26
28
27
29
@staticmethod
28
- def jinja2_regex_match (value : Any , regex : str ) -> bool :
30
+ def jinja2_filter_regex_match (value : Any , regex : str ) -> bool :
29
31
"""Jinja2 Filter to run re.search"""
30
32
return re .search (regex , value ) is None
31
33
32
34
@staticmethod
33
- def jinja2_regex_replace (value : Any , regex : str , repl : str ) -> str :
35
+ def jinja2_filter_regex_replace (value : Any , regex : str , repl : str ) -> str :
34
36
"""Jinja2 Filter to run re.sub"""
35
37
return re .sub (regex , repl , value )
36
38
39
+ @staticmethod
40
+ def jinja2_func_is_group_member (user : "User" , group_name : str ) -> bool :
41
+ """Check if `user` is member of group with name `group_name`"""
42
+ return user .groups .filter (name = group_name ).exists ()
43
+
37
44
def _get_expression_context (
38
45
self , request : PolicyRequest , ** kwargs
39
46
) -> Dict [str , Any ]:
40
47
"""Return dictionary with additional global variables passed to expression"""
48
+ # update passbook/policies/expression/templates/policy/expression/form.html
49
+ # update docs/policies/expression/index.md
41
50
kwargs ["pb_is_sso_flow" ] = request .user .session .get (
42
51
AuthenticationView .SESSION_IS_SSO_LOGIN , False
43
52
)
44
- kwargs ["pb_is_group_member" ] = lambda user , group : group .user_set .filter (
45
- pk = user .pk
46
- ).exists ()
53
+ kwargs ["pb_is_group_member" ] = Evaluator .jinja2_func_is_group_member
47
54
kwargs ["pb_logger" ] = get_logger ()
48
55
return kwargs
49
56
0 commit comments