Access.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. <?php
  2. namespace app\admin\model\store;
  3. use app\common\model\store\Access as AccessModel;
  4. /**
  5. * 商家用户权限模型
  6. * Class Access
  7. * @package app\admin\model\store
  8. */
  9. class Access extends AccessModel
  10. {
  11. /**
  12. * 获取权限列表
  13. * @throws \think\Exception
  14. * @throws \think\db\exception\DataNotFoundException
  15. * @throws \think\db\exception\ModelNotFoundException
  16. * @throws \think\exception\DbException
  17. */
  18. public function getList()
  19. {
  20. $all = static::getAll();
  21. return $this->formatTreeData($all);
  22. }
  23. /**
  24. * 新增记录
  25. * @param $data
  26. * @return false|int
  27. */
  28. public function add($data)
  29. {
  30. $data['wxapp_id'] = self::$wxapp_id;
  31. return $this->allowField(true)->save($data);
  32. }
  33. /**
  34. * 更新记录
  35. * @param $data
  36. * @return bool
  37. * @throws \think\db\exception\DataNotFoundException
  38. * @throws \think\db\exception\ModelNotFoundException
  39. * @throws \think\exception\DbException
  40. */
  41. public function edit($data)
  42. {
  43. // 判断上级角色是否为当前子级
  44. if ($data['parent_id'] > 0) {
  45. // 获取所有上级id集
  46. $parentIds = $this->getTopAccessIds($data['parent_id']);
  47. if (in_array($this['access_id'], $parentIds)) {
  48. $this->error = '上级权限不允许设置为当前子权限';
  49. return false;
  50. }
  51. }
  52. return $this->allowField(true)->save($data) !== false;
  53. }
  54. /**
  55. * 删除权限
  56. * @return bool|int
  57. * @throws \think\exception\DbException
  58. */
  59. public function remove()
  60. {
  61. // 判断是否存在下级权限
  62. if (self::detail(['parent_id' => $this['access_id']])) {
  63. $this->error = '当前权限下存在子权限,请先删除';
  64. return false;
  65. }
  66. return $this->delete();
  67. }
  68. /**
  69. * 获取所有上级id集
  70. * @param $access_id
  71. * @param null $all
  72. * @return array
  73. * @throws \think\db\exception\DataNotFoundException
  74. * @throws \think\db\exception\ModelNotFoundException
  75. * @throws \think\exception\DbException
  76. */
  77. private function getTopAccessIds($access_id, &$all = null)
  78. {
  79. static $ids = [];
  80. is_null($all) && $all = $this->getAll();
  81. foreach ($all as $item) {
  82. if ($item['access_id'] == $access_id && $item['parent_id'] > 0) {
  83. $ids[] = $item['parent_id'];
  84. $this->getTopAccessIds($item['parent_id'], $all);
  85. }
  86. }
  87. return $ids;
  88. }
  89. /**
  90. * 获取权限列表
  91. * @param $all
  92. * @param int $parent_id
  93. * @param int $deep
  94. * @return array
  95. */
  96. private function formatTreeData(&$all, $parent_id = 0, $deep = 1)
  97. {
  98. static $tempTreeArr = [];
  99. foreach ($all as $key => $val) {
  100. if ($val['parent_id'] == $parent_id) {
  101. // 记录深度
  102. $val['deep'] = $deep;
  103. // 根据角色深度处理名称前缀
  104. $val['name_h1'] = $this->htmlPrefix($deep) . $val['name'];
  105. $tempTreeArr[] = $val;
  106. $this->formatTreeData($all, $val['access_id'], $deep + 1);
  107. }
  108. }
  109. return $tempTreeArr;
  110. }
  111. private function htmlPrefix($deep)
  112. {
  113. // 根据角色深度处理名称前缀
  114. $prefix = '';
  115. if ($deep > 1) {
  116. for ($i = 1; $i <= $deep - 1; $i++) {
  117. $prefix .= '&nbsp;&nbsp;&nbsp;├ ';
  118. }
  119. $prefix .= '&nbsp;';
  120. }
  121. return $prefix;
  122. }
  123. /**
  124. * 新增默认权限
  125. */
  126. public function insertDefault()
  127. {
  128. $defaultData = $this->defaultData();
  129. $this->buildData($defaultData);
  130. }
  131. /**
  132. * 生成并写入默认数据
  133. * @param $defaultData
  134. * @param int $parent_id
  135. */
  136. private function buildData(&$defaultData, $parent_id = 0)
  137. {
  138. foreach ($defaultData as $key => $item) {
  139. // 保存数据
  140. $model = new static;
  141. $model->save([
  142. 'name' => $item['name'],
  143. 'url' => $item['url'],
  144. 'parent_id' => $parent_id,
  145. 'sort' => 100,
  146. ]);
  147. if (isset($item['subset']) && !empty($item['subset'])) {
  148. $this->buildData($item['subset'], $model['access_id']);
  149. }
  150. }
  151. }
  152. /**
  153. * 默认权限数据
  154. * @return array
  155. */
  156. private function defaultData()
  157. {
  158. return [
  159. [
  160. 'name' => '首页',
  161. 'url' => 'index/index'
  162. ],
  163. [
  164. 'name' => '管理员',
  165. 'url' => 'store',
  166. 'subset' => [
  167. [
  168. 'name' => '管理员管理',
  169. 'url' => 'store.user',
  170. 'subset' => [
  171. [
  172. 'name' => '管理员列表',
  173. 'url' => 'store.user/index'
  174. ],
  175. [
  176. 'name' => '添加管理员',
  177. 'url' => 'store.user/add'
  178. ],
  179. [
  180. 'name' => '编辑管理员',
  181. 'url' => 'store.user/edit'
  182. ],
  183. [
  184. 'name' => '删除管理员',
  185. 'url' => 'store.user/delete'
  186. ],
  187. ]
  188. ],
  189. [
  190. 'name' => '角色管理',
  191. 'url' => 'store.role',
  192. 'subset' => [
  193. [
  194. 'name' => '角色列表',
  195. 'url' => 'store.role/index'
  196. ],
  197. [
  198. 'name' => '添加角色',
  199. 'url' => 'store.role/add'
  200. ],
  201. [
  202. 'name' => '编辑角色',
  203. 'url' => 'store.role/edit'
  204. ],
  205. [
  206. 'name' => '删除角色',
  207. 'url' => 'store.role/delete'
  208. ],
  209. ]
  210. ],
  211. [
  212. 'name' => '权限管理',
  213. 'url' => 'store.access',
  214. 'subset' => [
  215. [
  216. 'name' => '权限列表',
  217. 'url' => 'store.access/index'
  218. ],
  219. [
  220. 'name' => '添加权限',
  221. 'url' => 'store.access/add'
  222. ],
  223. [
  224. 'name' => '编辑权限',
  225. 'url' => 'store.access/edit'
  226. ],
  227. [
  228. 'name' => '删除权限',
  229. 'url' => 'store.access/delete'
  230. ],
  231. ]
  232. ],
  233. ]
  234. ],
  235. [
  236. 'name' => '商品管理',
  237. 'url' => 'goods',
  238. 'subset' => [
  239. [
  240. 'name' => '商品管理',
  241. 'url' => 'goods',
  242. 'subset' => [
  243. [
  244. 'name' => '商品列表',
  245. 'url' => 'goods/index',
  246. ],
  247. [
  248. 'name' => '添加商品',
  249. 'url' => 'goods/add',
  250. ],
  251. [
  252. 'name' => '编辑商品',
  253. 'url' => 'goods/edit',
  254. ],
  255. [
  256. 'name' => '复制商品',
  257. 'url' => 'goods/copy',
  258. ],
  259. [
  260. 'name' => '删除商品',
  261. 'url' => 'goods/delete',
  262. ],
  263. [
  264. 'name' => '商品上下架',
  265. 'url' => 'goods/state',
  266. ],
  267. ]
  268. ],
  269. [
  270. 'name' => '商品分类',
  271. 'url' => 'goods.category',
  272. 'subset' => [
  273. [
  274. 'name' => '分类列表',
  275. 'url' => 'goods.category/index',
  276. ],
  277. [
  278. 'name' => '添加分类',
  279. 'url' => 'goods.category/add',
  280. ],
  281. [
  282. 'name' => '编辑分类',
  283. 'url' => 'goods.category/edit',
  284. ],
  285. [
  286. 'name' => '删除分类',
  287. 'url' => 'goods.category/delete',
  288. ],
  289. ],
  290. ],
  291. [
  292. 'name' => '商品评价',
  293. 'url' => 'goods.comment',
  294. 'subset' => [
  295. [
  296. 'name' => '评价列表',
  297. 'url' => 'goods.comment/index',
  298. ],
  299. [
  300. 'name' => '评价详情',
  301. 'url' => 'goods.comment/detail',
  302. ],
  303. [
  304. 'name' => '删除评价',
  305. 'url' => 'goods.comment/delete',
  306. ],
  307. ],
  308. ],
  309. ]
  310. ],
  311. [
  312. 'name' => '订单管理',
  313. 'url' => 'order',
  314. 'subset' => [
  315. [
  316. 'name' => '订单列表',
  317. 'url' => '',
  318. 'subset' => [
  319. [
  320. 'name' => '待发货',
  321. 'url' => 'order/delivery_list'
  322. ],
  323. [
  324. 'name' => '待收货',
  325. 'url' => 'order/receipt_list'
  326. ],
  327. [
  328. 'name' => '待付款',
  329. 'url' => 'order/pay_list'
  330. ],
  331. [
  332. 'name' => '已完成',
  333. 'url' => 'order/complete_list'
  334. ],
  335. [
  336. 'name' => '已取消',
  337. 'url' => 'order/cancel_list'
  338. ],
  339. [
  340. 'name' => '全部订单',
  341. 'url' => 'order/all_list',
  342. ],
  343. ]
  344. ],
  345. [
  346. 'name' => '订单详情',
  347. 'url' => '',
  348. 'subset' => [
  349. [
  350. 'name' => '详情信息',
  351. 'url' => 'order/detail',
  352. ],
  353. [
  354. 'name' => '确认发货',
  355. 'url' => 'order/delivery',
  356. ],
  357. [
  358. 'name' => '修改订单价格',
  359. 'url' => 'order/updateprice',
  360. ],
  361. ]
  362. ],
  363. [
  364. 'name' => '订单导出',
  365. 'url' => 'order.operate/export',
  366. ],
  367. [
  368. 'name' => '批量发货',
  369. 'url' => 'order.operate/batchdelivery',
  370. ],
  371. ]
  372. ],
  373. [
  374. 'name' => '用户管理',
  375. 'url' => 'user',
  376. 'subset' => [
  377. [
  378. 'name' => '用户列表',
  379. 'url' => 'user/index'
  380. ],
  381. [
  382. 'name' => '删除用户',
  383. 'url' => 'user/delete'
  384. ],
  385. ]
  386. ],
  387. [
  388. 'name' => '营销设置',
  389. 'url' => 'market',
  390. 'subset' => [
  391. [
  392. 'name' => '优惠券',
  393. 'url' => 'coupon',
  394. 'subset' => [
  395. [
  396. 'name' => '优惠券列表',
  397. 'url' => 'market.coupon/index',
  398. ],
  399. [
  400. 'name' => '新增优惠券',
  401. 'url' => 'market.coupon/add',
  402. ],
  403. [
  404. 'name' => '编辑优惠券',
  405. 'url' => 'market.coupon/edit',
  406. ],
  407. [
  408. 'name' => '删除优惠券',
  409. 'url' => 'market.coupon/delete',
  410. ],
  411. [
  412. 'name' => '领取记录',
  413. 'url' => 'market.coupon/receive',
  414. ]
  415. ]
  416. ]
  417. ]
  418. ],
  419. [
  420. 'name' => '小程序',
  421. 'url' => 'wxapp',
  422. 'subset' => [
  423. [
  424. 'name' => '小程序设置',
  425. 'url' => 'wxapp/setting',
  426. ],
  427. [
  428. 'name' => '页面管理',
  429. 'url' => 'wxapp.page',
  430. 'subset' => [
  431. [
  432. 'name' => '页面设计',
  433. 'url' => '',
  434. 'subset' => [
  435. [
  436. 'name' => '页面列表',
  437. 'url' => 'wxapp.page/index',
  438. ],
  439. [
  440. 'name' => '新增页面',
  441. 'url' => 'wxapp.page/add',
  442. ],
  443. [
  444. 'name' => '编辑页面',
  445. 'url' => 'wxapp.page/edit',
  446. ],
  447. [
  448. 'name' => '设为首页',
  449. 'url' => 'wxapp.page/sethome',
  450. ],
  451. ]
  452. ],
  453. [
  454. 'name' => '分类页模板',
  455. 'url' => 'wxapp.page/category',
  456. ],
  457. [
  458. 'name' => '页面链接',
  459. 'url' => 'wxapp.page/links',
  460. ],
  461. ]
  462. ],
  463. [
  464. 'name' => '帮助中心',
  465. 'url' => 'wxapp.help',
  466. 'subset' => [
  467. [
  468. 'name' => '帮助列表',
  469. 'url' => 'wxapp.help/index',
  470. ],
  471. [
  472. 'name' => '新增帮助',
  473. 'url' => 'wxapp.help/add',
  474. ],
  475. [
  476. 'name' => '编辑帮助',
  477. 'url' => 'wxapp.help/edit',
  478. ],
  479. [
  480. 'name' => '删除帮助',
  481. 'url' => 'wxapp.help/delete',
  482. ],
  483. ]
  484. ],
  485. ]
  486. ],
  487. [
  488. 'name' => '应用中心',
  489. 'url' => 'apps',
  490. 'subset' => [
  491. [
  492. 'name' => '分销中心',
  493. 'url' => 'apps.dealer',
  494. 'subset' => [
  495. [
  496. 'name' => '入驻申请',
  497. 'url' => 'apps.dealer.apply',
  498. 'subset' => [
  499. [
  500. 'name' => '申请列表',
  501. 'url' => 'apps.dealer.apply/index'
  502. ],
  503. [
  504. 'name' => '分销商审核',
  505. 'url' => 'apps.dealer.apply/submit'
  506. ]
  507. ]
  508. ],
  509. [
  510. 'name' => '分销商用户',
  511. 'url' => 'apps.dealer.user',
  512. 'subset' => [
  513. [
  514. 'name' => '分销商列表',
  515. 'url' => 'apps.dealer.user/index',
  516. ],
  517. [
  518. 'name' => '删除分销商',
  519. 'url' => 'apps.dealer.user/delete'
  520. ],
  521. [
  522. 'name' => '分销商二维码',
  523. 'url' => 'apps.dealer.user/qrcode'
  524. ]
  525. ]
  526. ],
  527. [
  528. 'name' => '分销订单',
  529. 'url' => 'apps.dealer.order/index',
  530. ],
  531. [
  532. 'name' => '提现申请',
  533. 'url' => 'apps.dealer.withdraw',
  534. 'subset' => [
  535. [
  536. 'name' => '申请列表',
  537. 'url' => 'apps.dealer.withdraw/index',
  538. ],
  539. [
  540. 'name' => '提现审核',
  541. 'url' => 'apps.dealer.withdraw/submit'
  542. ],
  543. [
  544. 'name' => '确认打款',
  545. 'url' => 'apps.dealer.withdraw/money'
  546. ]
  547. ]
  548. ],
  549. [
  550. 'name' => '分销设置',
  551. 'url' => 'apps.dealer.setting/index',
  552. ],
  553. [
  554. 'name' => '分销海报',
  555. 'url' => 'apps.dealer.setting/qrcode',
  556. ],
  557. ]
  558. ],
  559. ]
  560. ],
  561. [
  562. 'name' => '设置',
  563. 'url' => 'setting',
  564. 'subset' => [
  565. [
  566. 'name' => '商城设置',
  567. 'url' => 'setting/store',
  568. ],
  569. [
  570. 'name' => '交易设置',
  571. 'url' => 'setting/trade',
  572. ],
  573. [
  574. 'name' => '配送设置',
  575. 'url' => 'setting.delivery',
  576. 'subset' => [
  577. [
  578. 'name' => '运费模板列表',
  579. 'url' => 'setting.delivery/index'
  580. ],
  581. [
  582. 'name' => '新增运费模板',
  583. 'url' => 'setting.delivery/add'
  584. ],
  585. [
  586. 'name' => '编辑运费模板',
  587. 'url' => 'setting.delivery/edit'
  588. ],
  589. [
  590. 'name' => '删除运费模板',
  591. 'url' => 'setting.delivery/delete'
  592. ],
  593. ]
  594. ],
  595. [
  596. 'name' => '物流公司',
  597. 'url' => 'setting.express',
  598. 'subset' => [
  599. [
  600. 'name' => '物流公司列表',
  601. 'url' => 'setting.express/index'
  602. ],
  603. [
  604. 'name' => '新增物流公司',
  605. 'url' => 'setting.express/add'
  606. ],
  607. [
  608. 'name' => '编辑物流公司',
  609. 'url' => 'setting.express/edit'
  610. ],
  611. [
  612. 'name' => '删除物流公司',
  613. 'url' => 'setting.express/delete'
  614. ],
  615. ]
  616. ],
  617. [
  618. 'name' => '短信通知',
  619. 'url' => 'setting/sms',
  620. ],
  621. [
  622. 'name' => '模板消息',
  623. 'url' => 'setting/tplmsg',
  624. ],
  625. [
  626. 'name' => '上传设置',
  627. 'url' => 'setting/storage',
  628. ],
  629. [
  630. 'name' => '其他',
  631. 'url' => '',
  632. 'subset' => [
  633. [
  634. 'name' => '清理缓存',
  635. 'url' => 'setting.cache/clear',
  636. ],
  637. ]
  638. ]
  639. ]
  640. ],
  641. ];
  642. }
  643. }