فهرست منبع

角色组编辑,当取消某个角色组权限节点时,把该权限组的所有子权限组节点相应权限节点也取消,避免取消父节点节点权限后子节点仍可访问。

cxb 5 سال پیش
والد
کامیت
a4f6a29c09
1فایلهای تغییر یافته به همراه18 افزوده شده و 2 حذف شده
  1. 18 2
      application/admin/controller/auth/Group.php

+ 18 - 2
application/admin/controller/auth/Group.php

@@ -5,6 +5,8 @@ namespace app\admin\controller\auth;
 use app\admin\model\AuthGroup;
 use app\common\controller\Backend;
 use fast\Tree;
+use think\Db;
+use think\Exception;
 
 /**
  * 角色组
@@ -151,8 +153,22 @@ class Group extends Backend
             $rules = in_array('*', $currentrules) ? $rules : array_intersect($currentrules, $rules);
             $params['rules'] = implode(',', $rules);
             if ($params) {
-                $row->save($params);
-                $this->success();
+                Db::startTrans();
+                try {
+                    $row->save($params);
+                    $children_auth_groups = model("AuthGroup")->all(['id'=>['in',implode(',',(Tree::instance()->getChildrenIds($row->id)))]]);
+                    $childparams = [];
+                    foreach ($children_auth_groups as $key=>$children_auth_group) {
+                        $childparams[$key]['id'] = $children_auth_group->id;
+                        $childparams[$key]['rules'] = implode(',', array_intersect(explode(',', $children_auth_group->rules), $rules));
+                    }
+                    model("AuthGroup")->saveAll($childparams);
+                    Db::commit();
+                    $this->success();
+                }catch (Exception $e){
+                    Db::rollback();
+                    $this->error($e->getMessage());
+                }
             }
             $this->error();
             return;