Commit b60f5eda40171bf4a56dd665b456cb8a3f2ecbc4

Authored by xu
1 parent e5a695f1
Exists in master

1. 删除部分冗余代码

2. 厂商账号登录可以进入操作, 部分权限文件误删除了
app-ht/config/params.php
1 1 <?php
2 2 return [
3   - 'VERSION' => 'v1.8.6 build 15',
4   - 'MANUFACTURE_ROLE_ID' => 1
  3 + 'MANUFACTURE_ROLE_ID' => 1,
  4 + 'VERSION' => 'v1.8.6 build 15',
5 5 ];
6 6 \ No newline at end of file
... ...
app-ht/modules/datas/config/perm.php
... ... @@ -3,7 +3,7 @@
3 3 return [
4 4 'label' => '数据统计',
5 5 'items' => [
6   - 'shop_city' => [
  6 + 'data-stats' => [
7 7 'label' => '数据统计',
8 8 'items' => [
9 9 2 => '数据统计',
... ...
app-ht/modules/device/controllers/DeviceController.php
... ... @@ -329,7 +329,17 @@ class DeviceController extends BaseController
329 329 $type = $req->post('type');
330 330 $keyword = $req->post('query');
331 331 $e = new stdClass();
332   - $list = CreateBatchRepository::getSerialNoComponent($type, $keyword);
  332 + $where = [];
  333 + if ('manufacture' == $type) {
  334 + $user = Yii::$app->user->identity;
  335 + if (isset($user->is_manufacture) && $user->is_manufacture == 1) {
  336 + $where = 'sys_user_id = '.$user->id;
  337 +
  338 + } else {
  339 + $where = 'id >0';
  340 + }
  341 + }
  342 + $list = CreateBatchRepository::getSerialNoComponent($type, $where);
333 343 $e->list = $list;
334 344  
335 345 return $this->renderJson($e);
... ...
app-ht/modules/home/controllers/BoardController.php
... ... @@ -37,179 +37,6 @@ class BoardController extends BaseController
37 37 return $this->render("index", $params);
38 38 }
39 39  
40   - // 获取仪表盘信息
41   - public function actionGetData()
42   - {
43   - $act = $this->request->get('pickOrder');
44   - $e= new stdClass();
45   -
46   - if (empty($act)) {
47   - $e->engineerAuth = $this->getEngineerAuth(EngineerStatus::STATUS_REALNAME_REVIEW);
48   - $e->engineerAvaliable = $this->getEngineerAuth();
49   - $e->engineerSkillAuth = $this->getEngineerSkillAuth();
50   - $e->deviceReview = $this->getDeviceReview();
51   - $e->appeal = $this->getAppeal();
52   - $e->errorInvoice = $this->getErrorInvoice();
53   - $e->withdraw = $this->getWithdraw();
54   - } else {
55   - $queryPickOrder = RepairOrderModel::find();
56   - $queryPickOrder->where(['status' => RepairOrderStatus::STATUS_WAIT_PICK]);
57   - $count = $queryPickOrder->count();
58   - if (empty($count)) {
59   - $count = 0;
60   - }
61   - $e->pickOrderCount = $count;
62   - }
63   -
64   - return $this->renderJson($e);
65   - }
66   -
67   - // 获取订单数据
68   - public function actionGetOrderData()
69   - {
70   - $e = new stdClass();
71   - $e->success = true;
72   - $end = time();
73   - $endT = strtotime(date('Y-m-d')) + 1;
74   - $start = $endT - 6 * 24 * 3600;
75   - $status = array(
76   - RepairOrderStatus::STATUS_FINISH,
77   - RepairOrderStatus::STATUS_WAIT_RATE,
78   - RepairOrderStatus::STATUS_USER_CANCEL,
79   - RepairOrderStatus::STATUS_ENGINEER_CANCEL,
80   - RepairOrderStatus::STATUS_USER_CLOSE,
81   - RepairOrderStatus::STATUS_ENGINEER_CLOSE
82   - );
83   -
84   - $type = 0;
85   - $orderListTmp = $this->getOrder($start, $end, $type, $status);
86   - $orderList = array();
87   - if ($orderListTmp) {
88   - foreach ($orderListTmp as $k => $v) {
89   - $orderList[$v['mydate']] = $v;
90   - }
91   - }
92   - $dateList = $this->genDate($start);
93   - $data =array();
94   - foreach ($dateList as $kk => $vv) {
95   - $myArr = array();
96   - $myArr['date'] = $kk;
97   - if ($type == 0) {
98   - $myArr['pay_price'] = isset($orderList[$kk]['pay_price']) ? $orderList[$kk]['pay_price'] : 0;
99   - $myArr['repair_price'] = isset($orderList[$kk]['repair_price']) ? $orderList[$kk]['repair_price'] : 0;
100   - }
101   -
102   - $data[] = $myArr;
103   - }
104   - $e->data = $data;
105   - return $this->renderJson($e);
106   - }
107   -
108   - // 热力图
109   - public function actionGetHeatData()
110   - {
111   - $e= new stdClass();
112   - $e->success = true;
113   - $north_east= $this->request->get('north_east');
114   - $south_west = $this->request->get('south_west');
115   - $zoom = $this->request->get('zoom');
116   - $distance = 25000; //25公里内的点
117   - $earthRadius = Distance::EARTH_RADIUS;
118   - $table1 = 'address';
119   - $end = time();
120   - $endT =strtotime(date('Y-m-d')) + 1;
121   - $start = $endT - 6 * 24 * 3600;
122   - $status =array(
123   - RepairOrderStatus::STATUS_FINISH,
124   - RepairOrderStatus::STATUS_WAIT_RATE,
125   - RepairOrderStatus::STATUS_USER_CANCEL,
126   - RepairOrderStatus::STATUS_ENGINEER_CANCEL,
127   - RepairOrderStatus::STATUS_USER_CLOSE,
128   - RepairOrderStatus::STATUS_ENGINEER_CLOSE
129   - );
130   -
131   - /*
132   - $vRadian= "$earthRadius * acos( cos( radians('$lat') ) * cos( radians( $table1.latitude ) ) * cos( radians( $table1.longitude ) - radians('$lng') ) +
133   - sin( radians('$lat') ) * sin( radians( $table1.latitude ) ) )";
134   - */
135   -
136   - $repairOrderModel = RepairOrderModel::find();
137   - $repairOrderModel->leftJoin("address","address.id = repair_order.address_id");
138   - $repairOrderModel->select(["concat(address.latitude,'_',address.longitude) as latlng", "count(*) as mycount"]);
139   - $repairOrderModel->where(['repair_order.status' => $status]);
140   - $repairOrderModel->andFilterWhere(['>', 'repair_order.created_at', $start]);
141   - $repairOrderModel->andFilterWhere(['<', 'repair_order.created_at', $end]);
142   -
143   - $repairOrderModel->andFilterWhere(['<', "address.latitude", $north_east[0]]);
144   - $repairOrderModel->andFilterWhere(['>', "address.latitude", $south_west[0]]);
145   -
146   - $repairOrderModel->andFilterWhere(['<', "address.longitude", $north_east[1]]);
147   - $repairOrderModel->andFilterWhere(['>', "address.longitude", $south_west[1]]);
148   - $repairOrderModel->groupBy('latlng');
149   - $repairOrderModel->asArray();
150   - $olist = $repairOrderModel->all();
151   -
152   -
153   - $item = array('max' => 100, 'data' => array());
154   - if ($olist) {
155   - foreach ($olist as $k => $v) {
156   - $latlngTemp = explode('_', $v['latlng']);
157   - $item['data'][] = array('lat' => $latlngTemp[0], 'lng' => $latlngTemp[1], 'count' => $v['mycount']);
158   - }
159   - }
160   - $e->item =$item;
161   - return $this->renderJson($e);
162   - }
163   -
164   - // 获取通知
165   - public function actionGetNotice()
166   - {
167   - $act = $this->request->post('act');
168   - if ($act == 'remove') {
169   - $id = $this->request->post('id');
170   - return $this->removeNotice($id);
171   - }
172   - $e = new stdClass();
173   - $e->success = false;
174   -
175   - $e->count = 0;
176   -
177   - $noticeInfoModel = NoticeInfoModel::find();
178   - $noticeInfoModel->where(['status' => NoticeInfoModel::STATUS_UNREAD]);
179   -
180   - $noticeInfoModel->asArray();
181   - $count = $noticeInfoModel->count();
182   - $noticeInfoModel->limit(6);
183   - $nList = $noticeInfoModel->all();
184   - $e->msgList = array();
185   - if ($nList) {
186   - $tt = time();
187   - foreach ($nList as $k => $v) {
188   - $v['created_date_time'] = date('Y-m-d H:i:s', $v['created_at']);
189   - $v['created_time'] = $this->getTime($v['created_at'], $tt);
190   - $nList[$k] = $v;
191   - }
192   - $e->count = $count;
193   - $e->msgList = $nList;
194   - $e->success = true;
195   - }
196   -
197   - return $this->renderJson($e);
198   - }
199   -
200   - // 删除
201   - protected function removeNotice($id)
202   - {
203   - $e= new stdClass();
204   - $e->success = false;
205   - $e->error = 'Fail';
206   - $noticeInfo = NoticeInfoModel::findOne($id);
207   - if ($noticeInfo && $noticeInfo->delete()) {
208   - $e->success = true;
209   - }
210   -
211   - return $this->renderJson($e);
212   - }
213 40  
214 41 // 判断时间
215 42 protected function getTime($t, $curT)
... ... @@ -241,124 +68,4 @@ class BoardController extends BaseController
241 68 return $dataArr;
242 69 }
243 70  
244   - // 贴码设备
245   - protected function getDeviceReview()
246   - {
247   - $bindDeviceModel = BindDeviceApplyModel::find();
248   - $wh = array('status' => BindDeviceApplyModel::STATUS_APPLYING);
249   - $bindDeviceModel->where($wh);
250   - $count = $bindDeviceModel->count();
251   -
252   - $url = Url::toRoute('/device/userdevice/apply?status=0');
253   - $returnArr = array(0, $url);
254   - if ($count > 0) {
255   - $returnArr = array($count, $url);
256   - }
257   -
258   - return $returnArr;
259   - }
260   -
261   - // 质保申请
262   - protected function getAppeal()
263   - {
264   - $repairOrderAppealModel = RepairOrderAppealModel::find();
265   - $wh = array('status' => RepairOrderAppealModel::STATUS_APPEALING);
266   - $repairOrderAppealModel->where($wh);
267   - $count = $repairOrderAppealModel->count();
268   - $url = Url::toRoute('/trade/appeal/index');
269   - $returnArr = array(0, $url);
270   - if ($count > 0) {
271   - $returnArr = array($count, $url);
272   - }
273   -
274   - return $returnArr;
275   - }
276   -
277   - // 工程师认证
278   - protected function getEngineerAuth($status = EngineerStatus::STATUS_SKILL_AUTH)
279   - {
280   - $engineerModel = EngineerModel::find();
281   - $wh = array('status' => $status, 'is_fake_id' => 0);
282   - $engineerModel->where($wh);
283   - $count = $engineerModel->count();
284   - $url = Url::toRoute('/engineer/engineer/index?status=2');
285   - $returnArr = array(0, $url);
286   - if ($count > 0) {
287   - $returnArr = array($count, $url);
288   - }
289   -
290   - return $returnArr;
291   - }
292   -
293   - // 技能审核,这里不能以人为单位,应该以技能为单位,一个人可以多项技能认证
294   - protected function getEngineerSkillAuth()
295   - {
296   - $engineerSkillModel = EngineerSkillsModel::find();
297   - $wh = array('engineer_skills.status' => EngineerSkillsModel::STATUS_REVIEWING);
298   - $engineerSkillModel->select(["engineer_skills.engineer_id"]);
299   - $engineerSkillModel->distinct();
300   - $engineerSkillModel->where($wh);
301   -
302   - $count = $engineerSkillModel->count();
303   - $url = Url::toRoute('/engineer/engineer/index?status=6');
304   - $returnArr = array(0, $url);
305   - if ($count > 0) {
306   - $returnArr = array($count, $url);
307   - }
308   -
309   - return $returnArr;
310   - }
311   -
312   - // 提现审核
313   - protected function getWithdraw()
314   - {
315   - $count = EngineerWithdrawRepository::getReviewingWithdrawCount();
316   - $url = Url::toRoute('/engineer/withdraw/index');
317   - $returnArr = array(0, $url);
318   - if ($count > 0) {
319   - $returnArr = array($count, $url);
320   - }
321   -
322   - return $returnArr;
323   - }
324   -
325   - // 发票出错
326   - protected function getErrorInvoice($kplx = InvoiceApi::KPLX_NORMAL)
327   - {
328   - $invoiceModel = InvoiceModel::find();
329   - $wh = array('status' => InvoiceModel::STATUS_ERROR, 'kplx' => $kplx);
330   - $invoiceModel->where($wh);
331   - $count = $invoiceModel->count();
332   - $url = Url::toRoute(['/invoice/invoice/index', 'invoice_status' => InvoiceModel::STATUS_ERROR]);
333   - $returnArr = array(0, $url);
334   - if ($count > 0) {
335   - $returnArr = array($count, $url);
336   - }
337   -
338   - return $returnArr;
339   - }
340   -
341   - /* 订单数据 */
342   - //获取订单数量(当日和七天,已支付,未支付)
343   - protected function getOrder($start, $end, $selectType = 0, $status = 0)
344   - {
345   - $orderModel = RepairOrderModel::find();
346   - if ($status != 0) {
347   - $orderModel->where(['status' => $status]);
348   - }
349   -
350   - if ($selectType == 0) {
351   - $orderModel->select(['FROM_UNIXTIME(`created_at`, "%Y-%m-%d") as mydate','sum(pay_price) as pay_price','sum(repair_price) as repair_price']);
352   - } else {
353   - $orderModel->select(['FROM_UNIXTIME(`created_at`, "%Y-%m-%d") as mydate','count(*) as cc']);
354   - }
355   -
356   - $orderModel->andFilterWhere(['>', 'created_at', $start]);
357   - $orderModel->andFilterWhere(['<', 'created_at', $end]);
358   - $orderModel->groupBy('mydate');
359   - $orderModel->asArray();
360   - $oList = $orderModel->all();
361   -
362   - return $oList;
363   - }
364 71 }
365 72 \ No newline at end of file
... ...
app-ht/modules/home/views/board/index.php
... ... @@ -61,13 +61,5 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = &#39;控制面板&#39;;
61 61  
62 62 <script>
63 63  
64   - $(function(){
65   -
66   -
67   -
68   -
69   -
70   -
71   - })
72 64  
73 65 </script>
... ...
app-ht/modules/upgrade/controllers/UpgradeController.php
... ... @@ -76,7 +76,7 @@ class UpgradeController extends BaseController
76 76 }
77 77 $user = Yii::$app->user->identity;
78 78 if (isset($user->is_manufacture) && $user->is_manufacture == 1) {
79   - $where[] = ['like', 'mf.sys_user_id', $user->id];
  79 + $where[] = ['=', 'mf.sys_user_id', $user->id];// ???
80 80 }
81 81 if ($type == 0) {
82 82 $pageList = UpgradeRepository::getPageList($where, 0 , 0);
... ...
app-ht/views/layouts/_main-header.php
... ... @@ -13,10 +13,10 @@ use yii\helpers\Url;
13 13 <div class="navbar-custom-menu">
14 14 <ul class="nav navbar-nav">
15 15 <li>
16   - <a href="<?= Url::toRoute(['/my']) ?>">我的账号</a>
  16 + <a href="javascript:window.location.href='#/my/default/my-index';window.location.reload()" >我的账号</a>
17 17 </li>
18 18 <li>
19   - <a href="<?= Url::toRoute(['/my/default/password']) ?>">修改密码</a>
  19 + <a href="javascript:window.location.href='#/my/default/password';window.location.reload()">修改密码</a>
20 20 </li>
21 21 <li class="dropdown user user-menu">
22 22 <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
... ...
domain/device/CreateBatchRepository.php
... ... @@ -27,16 +27,16 @@ class CreateBatchRepository
27 27  
28 28 /**
29 29 * @param $type
30   - * @param $keyword
  30 + * @param $where
31 31 * @return array
32 32 */
33   - static function getSerialNoComponent($type, $keyword)
  33 + static function getSerialNoComponent($type, $where)
34 34 {
35 35 if ('manufacture' == $type) {
36 36 $q = new Query();
37 37 $q->select(['concat(id, "_", manufacture_no) as uid', 'id','manufacture_no', 'name']);
38 38 $q->from('manufacture');
39   - $q->where('id >0');
  39 + $q->where($where);
40 40  
41 41 $list = $q->all();
42 42  
... ... @@ -45,7 +45,7 @@ class CreateBatchRepository
45 45 $q = new Query();
46 46 $q->select(['concat(id,"_", project_no) as uid', 'id','project_no', 'name']);
47 47 $q->from('project');
48   - $q->where('id >0');
  48 + $q->where('id >0 and is_delete = 0');
49 49  
50 50 $list = $q->all();
51 51  
... ... @@ -54,7 +54,7 @@ class CreateBatchRepository
54 54 $q = new Query();
55 55 $q->select(['concat(id,"_", model_no) as uid','id','model_no', 'name']);
56 56 $q->from('model');
57   - $q->where('id >0');
  57 + $q->where('id >0 and is_delete = 0');
58 58 $list = $q->all();
59 59  
60 60 return $list;
... ... @@ -62,7 +62,7 @@ class CreateBatchRepository
62 62 $q = new Query();
63 63 $q->select(['concat(id,"_", production_no) as uid','id','production_no', 'name']);
64 64 $q->from('production');
65   - $q->where('id >0');
  65 + $q->where('id >0 and is_delete = 0');
66 66 $list = $q->all();
67 67  
68 68 return $list;
... ...
domain/system/AuthPerm.php 0 → 100644
... ... @@ -0,0 +1,119 @@
  1 +<?php
  2 +namespace domain\system;
  3 +
  4 +use Yii;
  5 +use domain\system\models\AuthPerm as AuthPermModel;
  6 +use domain\system\models\AuthPermsRoutes as AuthPermsRoutesModel;
  7 +
  8 +
  9 +class AuthPerm
  10 +{
  11 + const LEVEL_MODULE = 1; //
  12 + const LEVEL_CONTROLLER = 2; //
  13 + const LEVEL_ACTION = 3; //
  14 +
  15 + /**
  16 + * @param $item
  17 + * @return null|object
  18 + * @throws \yii\base\InvalidConfigException
  19 + */
  20 + static function create($item)
  21 + {
  22 + if (empty($item)) {
  23 + return null;
  24 + }
  25 + $arr = [
  26 + 'class' => AuthPermModel::className(),
  27 + 'name' => $item['name'],
  28 + 'parent_id' => $item['parent_id'],
  29 + 'level' => $item['level'],
  30 + 'desc' => $item['desc'],
  31 + ];
  32 +
  33 + $model = Yii::createObject($arr);
  34 + $model->save();
  35 +
  36 + return $model;
  37 + }
  38 +
  39 + /**
  40 + * @param $condition
  41 + * @return bool|int
  42 + */
  43 + static function deleteAll($condition)
  44 + {
  45 + if (empty($condition)) {
  46 + return false;
  47 + }
  48 +
  49 + return AuthPermModel::deleteAll($condition);
  50 + }
  51 +
  52 + /**
  53 + * @param $item
  54 + * @param $routers
  55 + * @return array|null
  56 + * @throws \yii\base\InvalidConfigException
  57 + */
  58 + static function createWithRouters($item, $routers)
  59 + {
  60 + if (empty($item) || empty($routers)) {
  61 + return null;
  62 + }
  63 + $arr = [
  64 + 'class' => AuthPermModel::className(),
  65 + 'name' => $item['name'],
  66 + 'parent_id' => $item['parent_id'],
  67 + 'level' => $item['level'],
  68 + 'desc' => $item['desc'],
  69 + ];
  70 +
  71 + $model = Yii::createObject($arr);
  72 + $routerArr = [];
  73 + if ($model->save()) {
  74 + foreach ($routers as $k => $v) {
  75 + $tmpArr = [
  76 + 'class' => AuthPermsRoutesModel::className(),
  77 + 'perm_id' => $model->perm_id,
  78 + 'route' => $v,
  79 + ];
  80 + $routerModel = Yii::createObject($tmpArr);
  81 + $routerModel->save();
  82 + $routerArr[] = $routerModel;
  83 + }
  84 + return [$model, $routerArr];
  85 + }
  86 +
  87 + return null;
  88 + }
  89 +
  90 + /**
  91 + * @param $permId
  92 + * @param $router
  93 + * @return bool|object
  94 + * @throws \yii\base\InvalidConfigException
  95 + */
  96 + static function createRouter($permId, $router)
  97 + {
  98 + if (empty($permId) || empty($router)) {
  99 + return false;
  100 + }
  101 + $modelArr = [
  102 + 'class' => AuthPermsRoutesModel::className(),
  103 + 'perm_id' => $permId,
  104 + 'route' => $router,
  105 + ];
  106 + $routerModel = Yii::createObject($modelArr);
  107 + $routerModel->save();
  108 + return $routerModel;
  109 + }
  110 +
  111 + /**
  112 + * @param $permId
  113 + * @return int
  114 + */
  115 + static function deletePermRouters($permId)
  116 + {
  117 + return AuthPermsRoutesModel::deleteAll(['perm_id' => $permId]);
  118 + }
  119 +}
... ...
domain/system/AuthPermRepository.php 0 → 100644
... ... @@ -0,0 +1,148 @@
  1 +<?php
  2 +namespace domain\system;
  3 +
  4 +use Yii;
  5 +use domain\system\models\AuthPerm as AuthPermModel;
  6 +use domain\system\models\AuthPermsRoutes as AuthPermsRoutesModel;
  7 +
  8 +use function count;
  9 +use function explode;
  10 +use function implode;
  11 +
  12 +class AuthPermRepository
  13 +{
  14 + /**
  15 + * @param $condition
  16 + * @return null|static[]
  17 + */
  18 + static function findAll($condition)
  19 + {
  20 + if (empty($condition)) {
  21 + return null;
  22 + }
  23 + return AuthPermModel::findAll($condition);
  24 + }
  25 +
  26 + /**
  27 + * @param $condition
  28 + * @return array|\yii\db\ActiveRecord[]
  29 + */
  30 + static function getAllItems($condition, $limit = null)
  31 + {
  32 + if (empty($condition)) {
  33 + return null;
  34 + }
  35 + $findModel = AuthPermModel::find();
  36 + $findModel->where($condition);
  37 + if ($limit) {
  38 + $findModel->limit($limit);
  39 + }
  40 + $rows = $findModel->all();
  41 + return $rows;
  42 + }
  43 +
  44 + /**
  45 + * @param $condition
  46 + * @return null|static
  47 + */
  48 + static function findOne($condition)
  49 + {
  50 + if (empty($condition)) {
  51 + return null;
  52 + }
  53 +
  54 + return AuthPermModel::findOne($condition);
  55 + }
  56 +
  57 + /**
  58 + * 根据扫描的route 返回他对应的级别
  59 + * @param $route
  60 + * @return int
  61 + */
  62 + static function routeLevel($route)
  63 + {
  64 + $items = explode('/',$route);
  65 + $len = count($items);
  66 +
  67 + if (2 == $len) {
  68 + if ('*' == $items[1]) {
  69 + return AuthPerm::LEVEL_MODULE;
  70 + } else {
  71 + return 0;
  72 + }
  73 + } else if(3 == $len){
  74 + if ('*' == $items[2]) {
  75 + return AuthPerm::LEVEL_CONTROLLER;
  76 + } else {
  77 + return AuthPerm::LEVEL_ACTION;
  78 + }
  79 + }
  80 + }
  81 +
  82 + /**
  83 + * @param $where
  84 + * @param $asArr
  85 + * @return array|\yii\db\ActiveRecord[]
  86 + */
  87 + static function getPermsRouters($where, $asArr = false)
  88 + {
  89 + $routersModel = AuthPermsRoutesModel::find();
  90 + $routersModel->where($where);
  91 + if ($asArr) {
  92 + $routersModel->asArray();
  93 + }
  94 + $return = $routersModel->all();
  95 +
  96 + return $return;
  97 + }
  98 +
  99 + /**
  100 + * @param $confirmRouters
  101 + * @return array
  102 + */
  103 + static function getGroupPermsRouters($confirmRouters)
  104 + {
  105 + $routers = $confirmRouters;
  106 + $modulesArr = [];
  107 + $controllerArr = [];
  108 + $actionArr = [];
  109 + $groupRouter = [];
  110 +
  111 + $permModel = AuthPermModel::find();
  112 + $permModel->where('perm_id >0');
  113 + $permModel->asArray();
  114 + $confirmPerms = $permModel->all();
  115 +
  116 + foreach ($routers as $rk => $rv) {
  117 + $groupRouter[$rv['perm_id']][] = $rv['route'];
  118 + }
  119 +
  120 + foreach ($confirmPerms as $k => $v) {
  121 + if (AuthPerm::LEVEL_MODULE == $v['level']) {
  122 + $modulesArr[$v['perm_id']] = ['id' => $v['perm_id'], 'label' => $v['name'],'items' => [],'routes' => '', 'parent_id' => $v['parent_id']];
  123 + } else if (AuthPerm::LEVEL_CONTROLLER == $v['level']) {
  124 + $controllerArr[$v['perm_id']] = ['id' => $v['perm_id'], 'label' => $v['name'],'items' => [],'routes' => '', 'parent_id' => $v['parent_id']];
  125 + } else if (AuthPerm::LEVEL_ACTION == $v['level']) {
  126 + $myRouters = isset($groupRouter[$v['perm_id']])? implode(',', $groupRouter[$v['perm_id']]): '';
  127 + $actionArr[$v['perm_id']] = ['id' => $v['perm_id'], 'label' => $v['name'], 'items' => [], 'routes' => $myRouters, 'parent_id' => $v['parent_id']];
  128 + }
  129 + }
  130 +
  131 + foreach ($actionArr as $ak => $av) {
  132 + if (isset($controllerArr[$av['parent_id']])) {
  133 + $controllerArr[$av['parent_id']]['items'][] = $av;
  134 + }
  135 +
  136 + }
  137 +
  138 + foreach ($controllerArr as $ck => $cv) {
  139 + if (isset($modulesArr[$cv['parent_id']])) {
  140 + $modulesArr[$cv['parent_id']]['items'][] = $cv;
  141 + }
  142 + }
  143 +
  144 + return $modulesArr;
  145 +
  146 + }
  147 +
  148 +}
... ...
domain/system/Route.php 0 → 100644
... ... @@ -0,0 +1,307 @@
  1 +<?php
  2 +namespace domain\system;
  3 +
  4 +use Yii;
  5 +use yii\base\Object;
  6 +use yii\caching\TagDependency;
  7 +use yii\helpers\VarDumper;
  8 +use yii\helpers\ArrayHelper;
  9 +use yii\web\Application;
  10 +use Exception;
  11 +
  12 +
  13 +class Route extends Object
  14 +{
  15 + const CACHE_TAG = 'jiwork.admin.route';
  16 +
  17 + const PREFIX_ADVANCED = '@';
  18 + const PREFIX_BASIC = '/';
  19 +
  20 + private $_routePrefix;
  21 +
  22 +
  23 + /**
  24 + * Returns route prefix depending on the configuration.
  25 + * @return string Route prefix
  26 + */
  27 + public function getRoutePrefix()
  28 + {
  29 + if (!$this->_routePrefix) {
  30 + $this->_routePrefix = self::PREFIX_BASIC;
  31 + }
  32 + return $this->_routePrefix;
  33 + }
  34 +
  35 + /**
  36 + * Returns the correct permission name depending on the configuration.
  37 + * @param string $route Route
  38 + * @return string Permission name
  39 + */
  40 + public function getPermissionName($route)
  41 + {
  42 + if (self::PREFIX_BASIC == $this->routePrefix) {
  43 + return self::PREFIX_BASIC . trim($route, self::PREFIX_BASIC);
  44 + } else {
  45 + return self::PREFIX_ADVANCED . ltrim(trim($route, self::PREFIX_BASIC), self::PREFIX_ADVANCED);
  46 + }
  47 + }
  48 +
  49 + /**
  50 + * Get available and assigned routes
  51 + * @return array
  52 + */
  53 + public function getRoutes()
  54 + {
  55 + //$manager = Configs::authManager();
  56 + // Get advanced configuration
  57 + //$advanced = Configs::instance()->advanced;
  58 + $advanced = null;
  59 + if ($advanced) {
  60 + // Use advanced route scheme.
  61 + // Set advanced route prefix.
  62 + $this->_routePrefix = self::PREFIX_ADVANCED;
  63 + // Create empty routes array.
  64 + $routes = [];
  65 + // Save original app.
  66 + $yiiApp = Yii::$app;
  67 + // Step through each configured application
  68 + foreach ($advanced as $id => $configPaths) {
  69 + // Force correct id string.
  70 + $id = $this->routePrefix . ltrim(trim($id), $this->routePrefix);
  71 + // Create empty config array.
  72 + $config = [];
  73 + // Assemble configuration for current app.
  74 + foreach ($configPaths as $configPath) {
  75 + // Merge every new configuration with the old config array.
  76 + $config = ArrayHelper::merge($config, require (Yii::getAlias($configPath)));
  77 + }
  78 + // Create new app using the config array.
  79 + unset($config['bootstrap']);
  80 + $app = new Application($config);
  81 + // Get all the routes of the newly created app.
  82 + $r = $this->getAppRoutes($app);
  83 + // Dump new app
  84 + unset($app);
  85 + // Prepend the app id to all routes.
  86 + foreach ($r as $route) {
  87 + $routes[$id . $route] = $id . $route;
  88 + }
  89 + }
  90 + // Switch back to original app.
  91 + Yii::$app = $yiiApp;
  92 + unset($yiiApp);
  93 + } else {
  94 + // Use basic route scheme.
  95 + // Set basic route prefix
  96 + $this->_routePrefix = self::PREFIX_BASIC;
  97 + // Get basic app routes.
  98 + $routes = $this->getAppRoutes();
  99 + }
  100 + $exists = [];
  101 + /*
  102 + foreach (array_keys($manager->getPermissions()) as $name) {
  103 + if ($name[0] !== $this->routePrefix) {
  104 + continue;
  105 + }
  106 + $exists[] = $name;
  107 + unset($routes[$name]);
  108 + }*/
  109 + return [
  110 + 'available' => array_keys($routes),
  111 + 'assigned' => $exists,
  112 + ];
  113 + }
  114 +
  115 + /**
  116 + * Get list of application routes
  117 + * @return array
  118 + */
  119 + public function getAppRoutes($module = null)
  120 + {
  121 + if ($module === null) {
  122 + $module = Yii::$app;
  123 + } elseif (is_string($module)) {
  124 + $module = Yii::$app->getModule($module);
  125 + }
  126 + $key = [__METHOD__, Yii::$app->id, $module->getUniqueId()];
  127 +
  128 + $cache = Yii::$app->cache;
  129 + if ($cache === null || ($result = $cache->get($key)) === false) {
  130 + $result = [];
  131 + $this->getRouteRecursive($module, $result);
  132 + if ($cache !== null) {
  133 + $cache->set($key, $result, $cache->cacheDuration, new TagDependency([
  134 + 'tags' => self::CACHE_TAG,
  135 + ]));
  136 +
  137 + }
  138 + }
  139 +
  140 + return $result;
  141 + }
  142 +
  143 + /**
  144 + * 后台路由
  145 + * @param null $module
  146 + * @return array|mixed
  147 + */
  148 + public function getHtAppRoutes($module = null)
  149 + {
  150 + if ($module === null) {
  151 + $module = Yii::$app;
  152 + } elseif (is_string($module)) {
  153 + $module = Yii::$app->getModule($module);
  154 + }
  155 +
  156 + $result = [];
  157 + $this->getRouteRecursive($module, $result);
  158 + $result = $this->ltrimRouter($result);
  159 +
  160 + return $result;
  161 + }
  162 +
  163 + /**
  164 + * delete router left /
  165 + * @param $routers
  166 + * @return array
  167 + */
  168 + public function ltrimRouter($routers)
  169 + {
  170 + $returnRouters = [];
  171 + foreach ($routers as $k => $v) {
  172 + $returnRouters[] = ltrim($v, '/');
  173 + }
  174 +
  175 + return $returnRouters;
  176 + }
  177 +
  178 + /**
  179 + * Get route(s) recursive
  180 + * @param \yii\base\Module $module
  181 + * @param array $result
  182 + */
  183 + protected function getRouteRecursive($module, &$result)
  184 + {
  185 + $token = "Get Route of '" . get_class($module) . "' with id '" . $module->uniqueId . "'";
  186 + Yii::beginProfile($token, __METHOD__);
  187 + try {
  188 + foreach ($module->getModules() as $id => $child) {
  189 + if (($child = $module->getModule($id)) !== null) {
  190 + $this->getRouteRecursive($child, $result);
  191 + }
  192 + }
  193 +
  194 + foreach ($module->controllerMap as $id => $type) {
  195 + $this->getControllerActions($type, $id, $module, $result);
  196 + }
  197 +
  198 + $namespace = trim($module->controllerNamespace, '\\') . '\\';
  199 + $this->getControllerFiles($module, $namespace, '', $result);
  200 + $all = '/' . ltrim($module->uniqueId . '/*', '/');
  201 + $result[$all] = $all;
  202 + } catch (Exception $exc) {
  203 + Yii::error($exc->getMessage(), __METHOD__);
  204 + }
  205 + Yii::endProfile($token, __METHOD__);
  206 + }
  207 +
  208 + /**
  209 + * Get list controller under module
  210 + * @param \yii\base\Module $module
  211 + * @param string $namespace
  212 + * @param string $prefix
  213 + * @param mixed $result
  214 + * @return mixed
  215 + */
  216 + protected function getControllerFiles($module, $namespace, $prefix, &$result)
  217 + {
  218 + $path = Yii::getAlias('@' . str_replace('\\', '/', $namespace), false);
  219 + $token = "Get controllers from '$path'";
  220 + Yii::beginProfile($token, __METHOD__);
  221 + try {
  222 + if (!is_dir($path)) {
  223 + return;
  224 + }
  225 + foreach (scandir($path) as $file) {
  226 + if ($file == '.' || $file == '..') {
  227 + continue;
  228 + }
  229 + if (is_dir($path . '/' . $file) && preg_match('%^[a-z0-9_/]+$%i', $file . '/')) {
  230 + $this->getControllerFiles($module, $namespace . $file . '\\', $prefix . $file . '/', $result);
  231 + } elseif (strcmp(substr($file, -14), 'Controller.php') === 0) {
  232 + $baseName = substr(basename($file), 0, -14);
  233 + $name = strtolower(preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $baseName));
  234 + $id = ltrim(str_replace(' ', '-', $name), '-');
  235 + $className = $namespace . $baseName . 'Controller';
  236 + if (strpos($className, '-') === false && class_exists($className) && is_subclass_of($className, 'yii\base\Controller')) {
  237 + $this->getControllerActions($className, $prefix . $id, $module, $result);
  238 + }
  239 + }
  240 + }
  241 + } catch (Exception $exc) {
  242 + Yii::error($exc->getMessage(), __METHOD__);
  243 + }
  244 + Yii::endProfile($token, __METHOD__);
  245 + }
  246 +
  247 + /**
  248 + * Get list action of controller
  249 + * @param mixed $type
  250 + * @param string $id
  251 + * @param \yii\base\Module $module
  252 + * @param string $result
  253 + */
  254 + protected function getControllerActions($type, $id, $module, &$result)
  255 + {
  256 + $token = "Create controller with cofig=" . VarDumper::dumpAsString($type) . " and id='$id'";
  257 + Yii::beginProfile($token, __METHOD__);
  258 + try {
  259 + /* @var $controller \yii\base\Controller */
  260 + $controller = Yii::createObject($type, [$id, $module]);
  261 + $this->getActionRoutes($controller, $result);
  262 + $all = "/{$controller->uniqueId}/*";
  263 + $result[$all] = $all;
  264 + } catch (Exception $exc) {
  265 + Yii::error($exc->getMessage(), __METHOD__);
  266 + }
  267 + Yii::endProfile($token, __METHOD__);
  268 + }
  269 +
  270 + /**
  271 + * Get route of action
  272 + * @param \yii\base\Controller $controller
  273 + * @param array $result all controller action.
  274 + */
  275 + protected function getActionRoutes($controller, &$result)
  276 + {
  277 + $token = "Get actions of controller '" . $controller->uniqueId . "'";
  278 + Yii::beginProfile($token, __METHOD__);
  279 + try {
  280 + $prefix = '/' . $controller->uniqueId . '/';
  281 + foreach ($controller->actions() as $id => $value) {
  282 + $result[$prefix . $id] = $prefix . $id;
  283 + }
  284 + $class = new \ReflectionClass($controller);
  285 + foreach ($class->getMethods() as $method) {
  286 + $name = $method->getName();
  287 + if ($method->isPublic() && !$method->isStatic() && strpos($name, 'action') === 0 && $name !== 'actions') {
  288 + $name = strtolower(preg_replace('/(?<![A-Z])[A-Z]/', ' \0', substr($name, 6)));
  289 + $id = $prefix . ltrim(str_replace(' ', '-', $name), '-');
  290 + $result[$id] = $id;
  291 + }
  292 + }
  293 + } catch (Exception $exc) {
  294 + Yii::error($exc->getMessage(), __METHOD__);
  295 + }
  296 + Yii::endProfile($token, __METHOD__);
  297 + }
  298 +
  299 + /**
  300 + * Ivalidate cache
  301 + */
  302 + public static function invalidate()
  303 + {
  304 +
  305 + }
  306 +
  307 +}
... ...
domain/system/models/AuthPerm.php 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +<?php
  2 +
  3 +namespace domain\system\models;
  4 +
  5 +use yii\db\ActiveRecord;
  6 +use yii\behaviors\TimestampBehavior;
  7 +
  8 +/**
  9 + * 路由权限
  10 + * This is the model class for table "{{%auth_perm.}}".
  11 + */
  12 +class AuthPerm extends ActiveRecord
  13 +{
  14 + /**
  15 + * @inheritdoc
  16 + */
  17 + public static function tableName()
  18 + {
  19 + return '{{%auth_perm}}';
  20 + }
  21 +
  22 + /**
  23 + * @return array
  24 + */
  25 + public function behaviors()
  26 + {
  27 + return [
  28 + 'time' => [
  29 + 'class' => TimestampBehavior::className(),
  30 + 'createdAtAttribute' => 'created_at',
  31 + 'updatedAtAttribute' => 'updated_at',
  32 + ]
  33 + ];
  34 + }
  35 +}
0 36 \ No newline at end of file
... ...
domain/system/models/AuthPermsRoutes.php 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +<?php
  2 +
  3 +namespace domain\system\models;
  4 +
  5 +use yii\db\ActiveRecord;
  6 +
  7 +/**
  8 + * 路由权限
  9 + * This is the model class for table "{{%auth_perms_routes.}}".
  10 + */
  11 +class AuthPermsRoutes extends ActiveRecord
  12 +{
  13 + /**
  14 + * @inheritdoc
  15 + */
  16 + public static function tableName()
  17 + {
  18 + return '{{%auth_perms_routes}}';
  19 + }
  20 +
  21 +}
0 22 \ No newline at end of file
... ...