formSafeTrait.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Admin\Controllers\Traits\WxSettingTraits;
  3. use App\Admin\Renderable\UsersRender;
  4. use App\Models\User\WxUser;
  5. use App\Wen\Utils\AdminUtils;
  6. use App\Wen\Utils\GatewayUtils;
  7. use App\Wen\Utils\Settings;
  8. use App\Wen\Utils\SiteUtils;
  9. use Dcat\Admin\Layout\Content;
  10. use Dcat\Admin\Widgets\Form;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Cache;
  13. trait formSafeTrait{
  14. public function index_safe(Content $content)
  15. {
  16. return $content->title('安全配置')
  17. // ->body($this->buildPreviewButton())
  18. // ->body($this->newline())
  19. ->body(
  20. <<<HTML
  21. <div class="card">{$this->form_safe()->render()}</div>
  22. HTML
  23. );
  24. }
  25. protected function form_safe(){
  26. $form = new Form();
  27. $form->confirm('您确定要提交表单吗?', 'content');
  28. $form->disableResetButton();
  29. $form->tab('管理', function (Form $form) {
  30. $form->html(function () {
  31. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">说明: <br>这里配置是在App小程序端生效,后台与app并不是一套用户体系,后台的权限控制在:<a href="'.admin_url('auth/users').'" target="_blank">[开发配置-团队]</a></div>';
  32. }, '');
  33. $form->multipleSelectTable('app_admin_super_admin', '超级管理员')
  34. ->title('用户')
  35. ->max(100)
  36. ->from(UsersRender::make())
  37. ->model(WxUser::class, 'id', 'user_name', 'selectTable:formSafeTrait:app_admin_super_admin')
  38. ->help('超级管理员比普通管理员拥有更多的权限,比如马甲,设置为超级管理员时,会同时增加普通管理员,普通管理员在<a href="'.admin_url('users').'" target="_blank">[用户管理-用户]</a>可以自行管理。<a href="https://doc.minisns.cn/doc/70/" target="_blank" style="color: red;">(ps:如何控制顺序?)&nbsp;</a>')
  39. ->default(Settings::get('app_admin_super_admin', '', true));
  40. $form->multipleSelectTable('app_admin_played_users', '马甲账号')
  41. ->title('用户')
  42. ->max(100)
  43. ->from(UsersRender::make())
  44. ->model(WxUser::class, 'id', 'user_name', 'selectTable:formSafeTrait:app_admin_played_users')
  45. ->help('需要超级管理员权限才可以使用这些马甲账号<a href="https://doc.minisns.cn/doc/70/" target="_blank" style="color: red;">(ps:如何控制顺序?)&nbsp;</a>')->default(Settings::get('app_admin_played_users', '', true));
  46. });
  47. global $__MINI_GLOBAL_TENANT_ID__;
  48. if($__MINI_GLOBAL_TENANT_ID__ === 0){
  49. $form->tab('三方服务', function (Form $form) {
  50. $form->html(function () {
  51. return '<div style="color: red;padding: 10px;border-radius: 5px;">*** 请勿泄露access_token ***</div>';
  52. }, '');
  53. $form->text('mini_access_token', 'access_token')->help('access_token用来对外部的请求进行安全校验,只有access_token匹配的情况下,第三方程序才能请求mini提供服务,access_token为url参数,不是body参数,请看<a href="" target="_blank">示例</a>')->default(Settings::get('mini_access_token', '', true));
  54. });
  55. }
  56. $form->action('settings/action/safe');
  57. return $form;
  58. }
  59. public function safe(Request $request){
  60. SiteUtils::forget_config_data();
  61. Cache::forget(_multi_key('admin_played_users'));
  62. $app_admin_super_admin = $request->input('app_admin_super_admin');
  63. if($app_admin_super_admin){
  64. global $__MINI_GLOBAL_TENANT_ID__;
  65. if($__MINI_GLOBAL_TENANT_ID__ > 0){
  66. foreach (explode(',', $app_admin_super_admin) as $user_id){
  67. if($user_id > 0){
  68. update_user_meta($user_id, 'tenant_id_'.$__MINI_GLOBAL_TENANT_ID__, 1, 'n');
  69. }
  70. }
  71. }else{
  72. WxUser::whereIn('id', explode(',', $app_admin_super_admin))->update(['is_official'=>1]);
  73. _update_env([
  74. 'APP_SUPER_ADMIN_USER_ID' => implode(',', (explode(',', $app_admin_super_admin) ?: [])),
  75. ], [], 1);
  76. }
  77. }
  78. $app_admin_played_users = $request->input('app_admin_played_users');
  79. if($app_admin_played_users){
  80. $admin_played_users = WxUser::whereIn('id',explode(',', $app_admin_played_users))->get(['id', 'user_name', 'user_avatar']);
  81. Cache::put(_multi_key('admin_played_users'), json_encode($admin_played_users));
  82. }
  83. Settings::set('app_admin_super_admin', AdminUtils::_multipleSelectTable_order_process('selectTable:formSafeTrait:app_admin_super_admin', $app_admin_super_admin), true, true);
  84. Settings::set('app_admin_played_users', AdminUtils::_multipleSelectTable_order_process('selectTable:formSafeTrait:app_admin_played_users', $app_admin_played_users), true, true);
  85. global $__MINI_GLOBAL_TENANT_ID__;
  86. if($__MINI_GLOBAL_TENANT_ID__ === 0){
  87. Settings::set('mini_access_token', $request->input('mini_access_token'), true, true);
  88. }
  89. $__global_config_version__ = Settings::get('__global_config_version__', 1) + 1;
  90. Settings::set('__global_config_version__', $__global_config_version__);
  91. GatewayUtils::success('all', 13, [ 'version' => $__global_config_version__, 'file' => basename(__FILE__) ]);
  92. return $this->response()->success('成功!');
  93. }
  94. }