/**
  * 静态方法, 单例统一访问入口
  * @return object  返回对象的唯一实例
  */
 public static function getInstance()
 {
     if (is_null(self::$_instance) || !isset(self::$_instance)) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
 /**
  * 获的共享父目录的权限
  */
 public function getPermission($userId, $path)
 {
     $publicPrivilege = MiniGroupPrivilege::getInstance()->getSpecifyPrivilege(-1, $path);
     if (!empty($publicPrivilege)) {
         $permission = $publicPrivilege['permission'];
         return $permission;
     }
     $privilegeLength = 9;
     $userPrivilege = MiniUserPrivilege::getInstance()->getSpecifyPrivilege($userId, $path);
     if (empty($userPrivilege)) {
         //如果不存在user_privilege,则向上查找group_privilege和department_privilege
         $groupPermission = GroupPermissionBiz::getInstance()->getPermission($path, $userId);
         $departmentPrivilege = new DepartmentPermissionBiz();
         $departmentPermission = $departmentPrivilege->getPermission($userId, $path);
         if (empty($groupPermission)) {
             $permission = $departmentPermission;
         }
         if (empty($departmentPermission)) {
             $permission = $groupPermission;
         }
         if (!empty($groupPermission) && !empty($departmentPermission)) {
             $permission = '';
             $total = $groupPermission + $departmentPermission;
             for ($i = 0; $i < $privilegeLength; $i++) {
                 $value = substr($total, $i, 1);
                 if ($value == '1' || $value == '2') {
                     $permission .= '1';
                 } else {
                     $permission .= '0';
                 }
             }
         }
     } else {
         $permission = $userPrivilege['permission'];
     }
     return $permission;
 }
 public function getPermission($path, $userId)
 {
     $file = MiniFile::getInstance()->getByPath($path);
     if (empty($file)) {
         throw new MFilesException(Yii::t('api', MConst::PARAMS_ERROR), MConst::HTTP_CODE_400);
     }
     //查询公共目录
     $pathArr = explode('/', $path);
     $masterId = $pathArr[1];
     $master = MiniUser::getInstance()->getUser($masterId, false);
     $shareUserNick = $master['nick'];
     $privilegeLength = 9;
     $file = MiniFile::getInstance()->getByPath($path);
     $fileType = $file['file_type'];
     if ($fileType == 2) {
         //如果刚好是共享目录
         if ((int) $masterId != $userId) {
             //该共享目录非当前用户目录时才会涉及权限
             $userPrivilege = MiniUserPrivilege::getInstance()->getSpecifyPrivilege($userId, $path);
             if (empty($userPrivilege)) {
                 //如果不存在user_privilege,则向上查找group_privilege和department_privilege
                 $groupPermission = GroupPermissionBiz::getInstance()->getPermission($path, $userId);
                 $departmentPrivilege = new DepartmentPermissionBiz();
                 $departmentPermission = $departmentPrivilege->getPermission($userId, $path);
                 if (empty($groupPermission)) {
                     $permission = $departmentPermission;
                 }
                 if (empty($departmentPermission)) {
                     $permission = $groupPermission;
                 }
                 if (!empty($groupPermission) && !empty($departmentPermission)) {
                     $permission = '';
                     $total = $groupPermission + $departmentPermission;
                     for ($i = 0; $i < $privilegeLength; $i++) {
                         $value = substr($total, $i, 1);
                         if ($value == '1' || $value == '2') {
                             $permission .= '1';
                         } else {
                             $permission .= '0';
                         }
                     }
                 }
                 if (empty($groupPermission) && empty($departmentPermission)) {
                     $permission = null;
                 }
             } else {
                 $permission = $userPrivilege['permission'];
             }
             if ($permission == null) {
                 return array('permission' => $permission);
             }
             return array("permission" => $permission, "share_root_path" => $path, "share_user_nick" => $shareUserNick, "is_share_folder" => true, 'can_set_share' => 0);
         }
         return array("permission" => MConst::SUPREME_PERMISSION, "share_root_path" => $path, "share_user_nick" => $shareUserNick, 'can_set_share' => 1);
     }
     if ($fileType == 1 || $fileType == 0) {
         //普通目录情况
         $model = new GeneralFolderPermissionBiz($path);
         //            if($model->permission == null){
         if ($model->isChildrenShared($path)) {
             $permission = MConst::SUPREME_PERMISSION;
             return array("permission" => $permission, "share_user_nick" => $shareUserNick, 'children_shared' => true, 'can_set_share' => 0);
         }
         //            }
         if ($model->isShared) {
             //如果该普通目录向上或者向下有共享
             if ($model->isParentShared($path)) {
                 //如果是父目录被共享
                 if ((int) $masterId != $userId) {
                     //非共享者本人操作此文件
                     $permission = $model->permission;
                     return array("permission" => $permission, "share_root_path" => $model->shareRootPath, "share_user_nick" => $shareUserNick, "is_share_folder" => true, 'can_set_share' => 0);
                 } else {
                     //本人操作文件
                     $permission = MConst::SUPREME_PERMISSION;
                     return array("permission" => $permission, "share_root_path" => $model->shareRootPath, "share_user_nick" => $shareUserNick, "is_share_folder" => true, 'can_set_share' => 0);
                 }
             }
         } else {
             //向上向下均没有共享
             return null;
         }
     }
     if ($fileType == 4) {
         //公共目录情况
         $model = new PublicFolderPermissionBiz();
         $permission = $model->getPublicPermission($path);
         if ($permission == null) {
             return null;
         }
         if ((int) $masterId != $userId) {
             //非共享者本人操作此文件
             return array("permission" => $permission, "share_user_nick" => $shareUserNick, "is_public_folder" => true, 'can_set_share' => 0);
         } else {
             $permission = MConst::SUPREME_PERMISSION;
             return array("permission" => $permission, "share_user_nick" => $shareUserNick, "is_public_folder" => true, 'can_set_share' => 0);
         }
     }
 }