48 lines
2.7 KiB
Python
48 lines
2.7 KiB
Python
"""按管理员授权补齐采购跟单的采样确认编辑权限,不改个人覆盖或其他岗位。"""
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument('--local', action='store_true')
|
|
parser.add_argument('--apply', action='store_true')
|
|
args = parser.parse_args()
|
|
if args.local:
|
|
from test_wsgi import app
|
|
else:
|
|
from app import app
|
|
from routes import auth, spot
|
|
from services.db import query
|
|
|
|
position = 'procurement_follower'
|
|
page = 'spot_confirmation'
|
|
with app.test_request_context():
|
|
before = query('SELECT page,operation,permission FROM position_operation_permissions '
|
|
'WHERE position_code=%s AND page=%s', (position, page))
|
|
print('before:', before)
|
|
if args.apply and not any(p['operation'] == 'edit' and p['permission'] == 1 for p in before):
|
|
auth._ensure_permission_baseline('position', position)
|
|
query('INSERT INTO position_operation_permissions (position_code,page,operation,permission) '
|
|
'VALUES (%s,%s,%s,1) ON DUPLICATE KEY UPDATE permission=1', (position, page, 'edit'))
|
|
detail = '修复权限矩阵漏项:按管理员要求为采购跟单启用现货采样确认编辑详情权限'
|
|
auth._create_permission_version('position', position, detail)
|
|
auth._record_permission_change('position', position, 'repair_missing_edit', before=before,
|
|
after={'page': page, 'operation': 'edit', 'permission': 1}, detail=detail)
|
|
users = query('SELECT id,username,real_name,role,position FROM dashboard_users WHERE username=%s', ('范亚欢',))
|
|
assert len(users) == 1 and users[0]['position'] == position, users
|
|
user = users[0]
|
|
auth.session.update(user_id=user['id'], username=user['username'], real_name=user['real_name'], role=user['role'])
|
|
allowed = auth.operation_required(page, 'edit')
|
|
profile = auth.profile.__wrapped__().get_json()['data']['permissions']
|
|
print('effective edit:', allowed, 'frontend permissions:', profile.get(page))
|
|
if args.apply:
|
|
assert allowed and profile[page]['edit'] == 1
|
|
# 空请求应通过权限判断,止于参数校验;不会读写业务记录。
|
|
with app.test_request_context('/api/spot/confirmation/save', method='POST', json={}):
|
|
auth.session.update(user_id=user['id'], role=user['role'])
|
|
response = spot.confirmation_save.__wrapped__()
|
|
payload = response[0].get_json()
|
|
assert payload['code'] == 400, payload
|
|
print('save endpoint: permission accepted; invalid empty payload rejected without data writes')
|