Esempio n. 1
0
 /**
  * +----------------------------------------------------------
  * 取得当前认证号的所有浏览map
  * +----------------------------------------------------------
  *
  * @param integer $authId
  *        	用户ID
  *        	+----------------------------------------------------------
  * @access public
  *         +----------------------------------------------------------
  */
 public static function getBrowseList($authId)
 {
     // 获取当前用户所有组
     $myallroles = Browse::getAuthorGroup($authId);
     $rolesstr = implode(',', array_filter($myallroles));
     $MisSystemDataAccessViewModel = D("MisSystemDataAccessView");
     $MisSystemDataAccessModelQuoteModel = M("mis_system_data_access_model_quote");
     // 查询当前用户的浏览权限
     if ($authId) {
         $db = Db::getInstance(C('RBAC_DB_DSN'));
         $userborwseList = $MisSystemDataAccessViewModel->where("mis_system_data_access_mas.status = 1 and startstatus=1 and mis_system_data_access_sub.accesscontent !='' and mis_system_data_access_sub.accesscontent is not null")->order("actionname,tablename,fieldname")->select();
         //根据用户组装一个数组
         $userAllborwseList = $MisSystemDataAccessViewModel->where("mis_system_data_access_mas.status = 1 and startstatus=1 and mis_system_data_access_sub.accesscontent !='' and mis_system_data_access_sub.accesscontent is not null  AND ( (  mis_system_data_access_sub.objtype = 1) AND  (mis_system_data_access_sub.objid = " . $authId . ")) OR ((mis_system_data_access_sub.objtype=2) AND (mis_system_data_access_sub.`objid` IN (" . $rolesstr . "))) ")->order("actionname,tablename,fieldname")->select();
         $userNewAlllist = array();
         foreach ($userAllborwseList as $userkey => $userval) {
             $userNewAlllist[$userval['actionname']][$userval['fieldname']][] = $userval;
         }
         //print_r($userborwseList);
         $MisSystemDataAccessModelQuoteList = $MisSystemDataAccessModelQuoteModel->where("status=1")->select();
         foreach ($MisSystemDataAccessModelQuoteList as $mqkey => $mqval) {
             $MisSystemDataAccessModelQuoteNewList[$mqval['actionname']][] = $mqval;
         }
         //查询继承数据权限表单
         $list = array();
         if ($userborwseList) {
             $formArr = array();
             $dformArr = array();
             foreach ($userborwseList as $ukey => $uval) {
                 $tablename = D($uval['actionname'])->getTablename();
                 if ($uval['fieldname']) {
                     if ($uval['accesscontenttype'] == 2) {
                         //分组授权
                         $groupval = "";
                         //分组所得数据权限
                         foreach ($userNewAlllist[$uval['actionname']][$uval['fieldname']] as $nekey => $neval) {
                             $groupval[] = Browse::getGroupVal($neval['accesscontent']);
                         }
                         $str = implode(',', array_values($groupval));
                     } else {
                         $newval = "";
                         //分组所得数据权限
                         foreach ($userNewAlllist[$uval['actionname']][$uval['fieldname']] as $nekey => $neval) {
                             $newval .= $neval['accesscontent'];
                         }
                         $str = $newval;
                     }
                     if ($uval['typeid'] == 1) {
                         if ($uval['isalldata'] == 1 || $str) {
                             //主表字段
                             if ($formArr[$uval['actionname']][$uval['fieldname']]) {
                                 $newstr = $formArr[$uval['actionname']][$uval['fieldname']] . ',' . $str;
                                 $formArr[$uval['actionname']][$uval['fieldname']] = $newstr;
                                 //$newmap=$list[$uval ['actionname']]['formsql'] . " AND {$uval['fieldname']}  in (" . $newstr .")";
                             } else {
                                 $formArr[$uval['actionname']][$uval['fieldname']] = $str;
                             }
                             if ($list[$uval['actionname']]['formsql']) {
                                 $newmap = $list[$uval['actionname']]['formsql'] . " AND {$tablename}.{$uval['fieldname']}  in (" . $formArr[$uval['actionname']][$uval['fieldname']] . ")";
                             } else {
                                 $newmap = "{$tablename}.{$uval['fieldname']}  in (" . $formArr[$uval['actionname']][$uval['fieldname']] . ")";
                             }
                             if ($uval['fieldname'] != $userborwseList[$ukey + 1]['fieldname']) {
                                 $list[$uval['actionname']]['formsql'] = $newmap;
                             }
                             if ($uval['actionname'] != $userborwseList[$ukey + 1]['actionname']) {
                                 $list[$uval['actionname']]['formsql'] = $newmap;
                             }
                             if ($uval['accesscontentcategory'] == 1) {
                                 //selectlist.inc
                                 if ($selectlist[$uval['actionname']][$uval['accesscontentsave']]) {
                                     $selectlist[$uval['actionname']][$uval['accesscontentsave']] .= ',' . $str;
                                 } else {
                                     $selectlist[$uval['actionname']][$uval['accesscontentsave']] = $str;
                                 }
                                 $list[$uval['actionname']]['selectlist'] = $selectlist[$uval['actionname']];
                             } else {
                                 $list[$uval['actionname']][$uval['accesscontentsource']] = array($uval['accesscontentsave'] => $formArr[$uval['actionname']][$uval['fieldname']]);
                             }
                         }
                     } else {
                         //内嵌表
                         $newmap = "";
                         if ($dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']]) {
                             //echo $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']];exit;
                             $dnewstr = $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']] . ',' . $str;
                             $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']] = $dnewstr;
                             //$newmap=$list[$uval ['actionname']][$uval['tablename']]['formsql'] . " AND {$uval['fieldname']}  in (" . $str .")";
                         } else {
                             $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']] = $str;
                             //$newmap=$uval['fieldname']."  in(".$str.")";
                         }
                         if ($list[$uval['actionname']][$uval['tablename']]['formsql']) {
                             $newmap = $list[$uval['actionname']][$uval['tablename']]['formsql'] . " AND {$tablename}.{$uval['fieldname']}  in (" . $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']] . ")";
                         } else {
                             $newmap = "{$tablename}.{$uval['fieldname']}  in (" . $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']] . ")";
                         }
                         if ($uval['fieldname'] != $userborwseList[$ukey + 1]['fieldname']) {
                             $list[$uval['actionname']][$uval['tablename']]['formsql'] = $newmap;
                         }
                         if ($uval['actionname'] != $userborwseList[$ukey + 1]['actionname']) {
                             $list[$uval['actionname']][$uval['tablename']]['formsql'] = $newmap;
                         }
                         if ($uval['accesscontentcategory'] == 1) {
                             //selectlist.inc
                             if ($selectlist[$uval['actionname']][$uval['tablename']][$uval['accesscontentsave']]) {
                                 $selectlist[$uval['actionname']][$uval['tablename']][$uval['accesscontentsave']] .= ',' . $str;
                             } else {
                                 $selectlist[$uval['actionname']][$uval['tablename']][$uval['accesscontentsave']] = $str;
                             }
                             $list[$uval['actionname']][$uval['tablename']]['selectlist'] = $selectlist[$uval['actionname']][$uval['tablename']];
                         } else {
                             $list[$uval['actionname']][$uval['tablename']][$uval['accesscontentsource']] = array($uval['accesscontentsave'] => $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']]);
                         }
                         //$list [$uval ['actionname']][$uval['tablename']]['formsql']=$newmap;//列表用的map 条件
                         if ($uval['accesscontentcategory'] == 1) {
                             //selectlist.inc
                             if ($selectlist[$uval['actionname']][$uval['tablename']][$uval['accesscontentsave']]) {
                                 $selectlist[$uval['actionname']][$uval['tablename']][$uval['accesscontentsave']] .= ',' . $str;
                             } else {
                                 $selectlist[$uval['actionname']][$uval['tablename']][$uval['accesscontentsave']] = $str;
                             }
                             $list[$uval['actionname']][$uval['tablename']]['selectlist'] = $selectlist[$uval['actionname']][$uval['tablename']];
                         } else {
                             $list[$uval['actionname']][$uval['tablename']][$uval['accesscontentsource']][$uval['accesscontentsave']] = $dformArr[$uval['actionname']][$uval['tablename']][$uval['fieldname']];
                         }
                     }
                     if ($MisSystemDataAccessModelQuoteNewList[$uval['actionname']] && $uval['actionname'] != $userborwseList[$ukey + 1]['actionname']) {
                         //有继承权限模块
                         foreach ($MisSystemDataAccessModelQuoteNewList[$uval['actionname']] as $mqnkey => $mqnval) {
                             //获取客户表
                             if ($list[$mqnval['quoteaction']]['extend'][$tablename]) {
                                 $list[$mqnval['quoteaction']]['extend'][$tablename] .= " and " . $list[$uval['actionname']]['formsql'];
                             } else {
                                 $list[$mqnval['quoteaction']]['extend'][$tablename] = $list[$uval['actionname']]['formsql'];
                             }
                             if ($list[$mqnval['quoteaction']]['extend']['formsql']) {
                                 $list[$mqnval['quoteaction']]['extend']['formsql'] .= " and " . $mqnval['quotefield'] . " in (select " . $mqnval['savefield'] . " from  " . $tablename . "  where " . $list[$uval['actionname']]['formsql'] . " ) ";
                             } else {
                                 $list[$mqnval['quoteaction']]['extend']['formsql'] = $mqnval['quotefield'] . " in (select " . $mqnval['savefield'] . " from  " . D($uval['actionname'])->getTablename() . "  where " . $list[$uval['actionname']]['formsql'] . " ) ";
                             }
                         }
                     }
                 }
             }
         }
         // 返回数组
         return $list;
     }
 }