feat(pay): capability gates for transfer and withdraw

AND feature flags with user_caps balance_transfer / points_transfer /
balance_withdraw on REST and user-center buttons.
This commit is contained in:
kate522 committed 2026-07-16 22:35:48 +08:00
1 parent 9b98080daf
commit c45a0ecef5
4 files changed
+21

No files matched your search

@@ -172,6 +172,9 @@ class AKSRT_Balance_Service {
if (empty($cfg['enabled']) || empty($cfg['transfer']['enabled'])) {
return new WP_Error('aksrt_transfer_closed', __('余额转账未开启', 'aksrt'), ['status' => 403]);
}
if (class_exists('AKSRT_Settings_Capabilities') && !AKSRT_Settings_Capabilities::user_can('balance_transfer', $from_id)) {
return new WP_Error('aksrt_transfer_forbidden', __('当前账号无权转账余额', 'aksrt'), ['status' => 403]);
}
$amount = round((float) $amount_raw, 2);
if ($amount <= 0) {
return new WP_Error('aksrt_transfer_amount', __('请输入有效金额', 'aksrt'), ['status' => 400]);
@@ -220,6 +223,9 @@ class AKSRT_Balance_Service {
if (!class_exists('AKSRT_Settings') || !AKSRT_Settings::credits_enabled() || !$points_transfer_on) {
return new WP_Error('aksrt_transfer_closed', __('积分转账未开启', 'aksrt'), ['status' => 403]);
}
if (class_exists('AKSRT_Settings_Capabilities') && !AKSRT_Settings_Capabilities::user_can('points_transfer', $from_id)) {
return new WP_Error('aksrt_transfer_forbidden', __('当前账号无权转账积分', 'aksrt'), ['status' => 403]);
}
$amount = (int) $amount_raw;
if ($amount <= 0) {
return new WP_Error('aksrt_transfer_amount', __('请输入有效积分', 'aksrt'), ['status' => 400]);
@@ -724,6 +730,9 @@ class AKSRT_Balance_Service {
$params = $request->get_params();
}
$user_id = get_current_user_id();
if (class_exists('AKSRT_Settings_Capabilities') && !AKSRT_Settings_Capabilities::user_can('balance_withdraw', $user_id)) {
return new WP_Error('aksrt_withdraw_forbidden', __('当前账号无权提现', 'aksrt'), ['status' => 403]);
}
$amount = round((float) ($params['amount'] ?? 0), 2);
$method = sanitize_key((string) ($params['method'] ?? 'alipay'));
$account = sanitize_textarea_field((string) ($params['account_info'] ?? $params['account'] ?? ''));