14
14
from models .backend_core import User , Role
15
15
16
16
from flask_security import (
17
+ current_user ,
17
18
Security ,
18
19
auth_required ,
19
20
SQLAlchemySessionUserDatastore ,
20
21
)
21
- from core .rule import RuleFactory , RuleConverter , Rule
22
22
from core .outcomes import FixedOutcome
23
23
from core .rule import RuleFactory , RuleConverter , Rule
24
24
from core .rule_checkers import (
@@ -145,6 +145,8 @@ def show_rule(rule_id=None, revision_number=None):
145
145
del form .rid
146
146
revision_list = fsrm .get_rule_revision_list (rule )
147
147
rule_lock = rule_locker .is_record_locked (rule )
148
+ if rule_lock :
149
+ del form ["submit" ]
148
150
return render_template (
149
151
"show_rule.html" ,
150
152
rule = rule_json ,
@@ -163,7 +165,13 @@ def show_rule(rule_id=None, revision_number=None):
163
165
return redirect (url_for ("show_rule" , rule_id = rule_id ))
164
166
app .logger .info (request .form )
165
167
rule = fsrm .load_rule (rule_id )
166
- # TODO reject the change is the rule is locked
168
+ lock_record = rule_locker .is_record_locked (rule )
169
+ if lock_record is not None :
170
+ if lock_record .locked_by != current_user .email :
171
+ flash (
172
+ f"Changes to { rule_id } were NOT saved. Rule is locked by { lock_record .locked_by } "
173
+ )
174
+ return redirect (url_for ("show_rule" , rule_id = rule_id ))
167
175
app .logger .info (f"Current rule state { rule } " )
168
176
rule .description = form .description .data
169
177
rule .logic = form .logic .data
@@ -224,7 +232,7 @@ def test_rule():
224
232
@csrf .exempt
225
233
def lock_rule (rule_id ):
226
234
rule = fsrm .load_rule (rule_id )
227
- success , result = rule_locker .lock_storage (rule )
235
+ success , result = rule_locker .lock_storage (rule , locked_by = current_user . email )
228
236
return {"success" : success , ** result ._asdict ()}
229
237
230
238
0 commit comments