/** * 静态方法, 单例统一访问入口 * @return object 返回对象的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance) || !isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; }
public function getFriends($pageSize, $page) { $userId = $this->user["id"]; $userCount = MiniUser::getInstance()->getEnableCount() - 1; $items = MiniUser::getInstance()->getPageList($userId, "-id", $pageSize, ($page - 1) * $pageSize); $users = array(); foreach ($items as $item) { $friend = array(); $friend["id"] = $item["id"]; $friend["nick"] = $item["nick"]; $friend["name"] = $item["user_name"]; $friend["avatar"] = $item['avatar']; $arr = MiniUserGroupRelation::getInstance()->findUserGroup($userId, $item["id"]); //找到好友对应的群组(这里会关联到非当前用户新建的用户组,下面解决此问题) $ownerGroup = MiniGroup::getInstance()->getList($userId); $ownerGroupList = $ownerGroup['list']; //找到当前用户拥有的群组 $result = array(); foreach ($arr as $brr) { //遍历好友的群组, if (in_array($brr, $ownerGroupList)) { //找出其群组与当前用户相同的则放入该用户的user_group,就是此处的$result array_push($result, $brr); } } $friend["user_group"] = $result; array_push($users, $friend); } $data = array(); $data["count"] = $userCount; $data["users"] = $users; return $data; }
public function getPermission($path, $userId) { $privilegeLength = 9; //权限长度 后期更改则做相应调整 $userInGroups = MiniUserGroupRelation::getInstance()->getByUserId($userId); //用户所在的部门列表,查表user_group_relation if (count($userInGroups) > 0) { //说明该用户被其他用户分配到其群组中 //寻找该用户所在的组有无权限,有权限则说明对应的权限有共享文件 $privilegeArr = array(); //一个用户同一个被共享文件对应多个群组权限集合 foreach ($userInGroups as $userInGroup) { $groupId = $userInGroup['group_id']; $group = MiniGroup::getInstance()->getById($groupId); if ($group['user_id'] != -1) { //表示该组为群组 $groupPrivilege = MiniGroupPrivilege::getInstance()->getSpecifyPrivilege($groupId, $path); if (!empty($groupPrivilege)) { array_push($privilegeArr, $groupPrivilege); } } } if (count($privilegeArr) > 0) { $permission = ''; for ($i = 0; $i < $privilegeLength; $i++) { foreach ($privilegeArr as $privilege) { $can = false; $value = substr($privilege['permission'], $i, 1); if ($value == '1') { $can = true; break; } } if ($can) { $permission .= '1'; } else { $permission .= '0'; } } return $permission; } } return null; }
/** * 存储部门信息,以及用户与部门的关系 */ private function saveData($userName, $departmentId) { $user = MiniUser::getInstance()->getUserByName($userName); $userGroupRelations = MiniUserGroupRelation::getInstance()->getByUserId($user['id']); $isExist = false; //判断用户是否已经被导入,存在则修改 if (!empty($userGroupRelations)) { foreach ($userGroupRelations as $userGroupRelation) { $group = MiniGroup::getInstance()->getById($userGroupRelation['group_id']); if (!empty($group)) { if ($group['user_id'] > 0) { continue; } else { $isExist = true; break; } } } } $group = MiniGroup::getInstance()->findById($departmentId); if ($isExist) { MiniUserGroupRelation::getInstance()->update($user['id'], $group['id']); } else { MiniUserGroupRelation::getInstance()->create($user['id'], $group['id']); } }
/** * 获得拥有权限的用户列表 */ public function getPrivilegeList($filePath) { //获得绝对路径 $privileges = MiniUserPrivilege::getInstance()->getPrivilegeList($filePath); $groupPrivileges = MiniGroupPrivilege::getInstance()->getPrivilegeList($filePath); $data = array(); foreach ($privileges as $item) { $user = MiniUser::getInstance()->getUser($item['user_id']); $privilege = array(); $privilege['id'] = $user['user_id']; $privilege['name'] = $user['user_name']; $privilege['nick'] = $user['nick']; $privilege['avatar'] = $user['avatar']; $privilege['user_status'] = $user['user_status']; $permission = $item['permission']; $readValue = substr($permission, 0, 1); $modifyValue = substr($permission, 1); $dirCreateValue = substr($permission, 1, 1); $dirRenameValue = substr($permission, 2, 1); $dirDelValue = substr($permission, 3, 1); $fileUploadValue = substr($permission, 4, 1); $contentValue = substr($permission, 5, 1); $fileRenameValue = substr($permission, 6, 1); $fileDelValue = substr($permission, 7, 1); $previewValue = substr($permission, 8, 1); if ($readValue == '1') { //read权限 与js格式转化为一致 $privilege['view'] = true; } else { $privilege['view'] = false; } if ($dirCreateValue == '1') { //dir_create权限 与js格式转化为一致 $privilege['dir_create'] = true; } else { $privilege['dir_create'] = false; } if ($dirRenameValue == '1') { //dir_rename权限 与js格式转化为一致 $privilege['dir_rename'] = true; } else { $privilege['dir_rename'] = false; } if ($dirDelValue == '1') { //dir_del权限 与js格式转化为一致 $privilege['dir_delete'] = true; } else { $privilege['dir_delete'] = false; } if ($fileUploadValue == '1') { //file_upload权限 与js格式转化为一致 $privilege['file_upload'] = true; } else { $privilege['file_upload'] = false; } if ($fileRenameValue == '1') { //file_rename权限 与js格式转化为一致 $privilege['file_rename'] = true; } else { $privilege['file_rename'] = false; } if ($contentValue == '1') { //content权限 与js格式转化为一致 $privilege['file_edit'] = true; } else { $privilege['file_edit'] = false; } if ($fileDelValue == '1') { //file_del权限 与js格式转化为一致 $privilege['file_delete'] = true; } else { $privilege['file_delete'] = false; } if ($previewValue == '1') { //preview权限 与js格式转化为一致 $privilege['download'] = true; } else { $privilege['download'] = false; } if ($modifyValue == '11111111') { $privilege['modified'] = true; } else { $privilege['modified'] = false; } $privilege['type'] = "0"; array_push($data, $privilege); } foreach ($groupPrivileges as $item) { $group = MiniGroup::getInstance()->getById($item['group_id']); $privilege = array(); $privilege['id'] = $item['group_id']; $privilege['name'] = $group['group_name']; $privilege['nick'] = $group['group_name']; $privilege['avatar'] = MiniHttp::getMiniHost() . "static/images/icon_group.png"; $permission = $item['permission']; $readValue = substr($permission, 0, 1); $modifyValue = substr($permission, 1); $dirCreateValue = substr($permission, 1, 1); $dirRenameValue = substr($permission, 2, 1); $dirDelValue = substr($permission, 3, 1); $fileUploadValue = substr($permission, 4, 1); $contentValue = substr($permission, 5, 1); $fileRenameValue = substr($permission, 6, 1); $fileDelValue = substr($permission, 7, 1); $previewValue = substr($permission, 8, 1); if ($readValue == '1') { //read权限 与js格式转化为一致 $privilege['view'] = true; } else { $privilege['view'] = false; } if ($dirCreateValue == '1') { //dir_create权限 与js格式转化为一致 $privilege['dir_create'] = true; } else { $privilege['dir_create'] = false; } if ($dirRenameValue == '1') { //dir_rename权限 与js格式转化为一致 $privilege['dir_rename'] = true; } else { $privilege['dir_rename'] = false; } if ($dirDelValue == '1') { //dir_del权限 与js格式转化为一致 $privilege['dir_delete'] = true; } else { $privilege['dir_delete'] = false; } if ($fileUploadValue == '1') { //file_upload权限 与js格式转化为一致 $privilege['file_upload'] = true; } else { $privilege['file_upload'] = false; } if ($fileRenameValue == '1') { //file_rename权限 与js格式转化为一致 $privilege['file_rename'] = true; } else { $privilege['file_rename'] = false; } if ($contentValue == '1') { //content权限 与js格式转化为一致 $privilege['file_edit'] = true; } else { $privilege['file_edit'] = false; } if ($fileDelValue == '1') { //file_del权限 与js格式转化为一致 $privilege['file_delete'] = true; } else { $privilege['file_delete'] = false; } if ($previewValue == '1') { //preview权限 与js格式转化为一致 $privilege['download'] = true; } else { $privilege['download'] = false; } if ($modifyValue == '11111111') { $privilege['modified'] = true; } else { $privilege['modified'] = false; } $privilege['type'] = "1"; array_push($data, $privilege); } return $data; }
/** * 群组更名 */ public function rename($oldGroupName, $newGroupName) { $user = $this->user; $userId = $user['user_id']; return MiniGroup::getInstance()->rename($oldGroupName, $newGroupName, $userId); }
/** * 根据userId获取部门 */ public function getDepartment($userId) { $relations = $this->getByUserId($userId); if (empty($relations)) { return NULL; } foreach ($relations as $relation) { $group = MiniGroup::getInstance()->getById($relation['group_id']); if ($group['user_id'] == -1) { return $group; } } return NULL; }
/** * 判断目录是否可发起共享 * 递归查询父目录file_type情况,file_type=1时返回false,file_type==2||3时返回true */ public function getFolderPrivilege($currentUserId, $file) { $filePath = $file['file_path']; $fileType = (int) $file['file_type']; //被共享目录本身可以修改和删除 $privilege = array('resource.read' => 1, 'folder.create' => 1, 'folder.rename' => 1, 'folder.delete' => 1, 'file.create' => 1, 'file.modify' => 1, 'file.rename' => 1, 'file.delete' => 1, 'permission.grant' => 1, 'can_set_share' => 1); if ($fileType == 3) { $parentPath = $file['file_path']; //当用户,群组与部门中的用户权限出现重复时,获取最小部门的权限,顺序为用户,群组,部门 $userPrivilege = MiniUserPrivilege::getInstance()->getSpecifyPrivilege($currentUserId, $parentPath); if (empty($userPrivilege)) { $userGroupRelations = MiniUserGroupRelation::getInstance()->getByUserId($currentUserId); if (count($userGroupRelations) > 1) { //说明用户对应了群组和部门, $groupIdsArr = array(); //获取群组id foreach ($userGroupRelations as $userGroupRelation) { $group = MiniGroup::getInstance()->findById($userGroupRelation['group_id']); if ($group['user_id'] != -1) { array_push($groupIdsArr, $userGroupRelation['group_id']); } else { $departmentId = $userGroupRelation['group_id']; } } //将所有群组的权限放入数组 $permissionArr = array(); foreach ($groupIdsArr as $groupId) { $privilege_0 = MiniGroupPrivilege::getInstance()->getSpecifyPrivilege($groupId, $parentPath); if (!empty($privilege_0)) { array_push($permissionArr, $privilege_0['permission']); } } //拼接群组中权限的最大值,如果为空则为空字符串 $permission = ""; if (count($permissionArr) > 0) { for ($j = 0; $j < 10; $j++) { $isHighestAuthority = false; foreach ($permissionArr as $per) { if ($per[$j] == 1) { $isHighestAuthority = true; break; } } if ($isHighestAuthority) { $permission .= "1"; } else { $permission .= "0"; } } } if ($permission == "") { $groupPrivilege = MiniGroupPrivilege::getInstance()->getSpecifyPrivilege($departmentId, $parentPath); if (empty($groupPrivilege)) { $groupPrivilege = MiniGroupPrivilege::getInstance()->getGroupPrivilege($filePath, $departmentId); } $permission = $groupPrivilege['permission']; } } else { $groupId = $userGroupRelations[0]['group_id']; $groupPrivilege = MiniGroupPrivilege::getInstance()->getSpecifyPrivilege($groupId, $parentPath); if (empty($groupPrivilege)) { $groupPrivilege = MiniGroupPrivilege::getInstance()->getGroupPrivilege($filePath, $groupId); } $permission = $groupPrivilege['permission']; } } else { $permission = $userPrivilege['permission']; } for ($i = 0; $i < strlen($permission); $i++) { $privilege['resource.read'] = (int) $permission[0]; $privilege['folder.create'] = (int) $permission[1]; $privilege['folder.rename'] = (int) $permission[2]; $privilege['folder.delete'] = (int) $permission[3]; $privilege['file.create'] = (int) $permission[4]; $privilege['file.modify'] = (int) $permission[5]; $privilege['file.rename'] = (int) $permission[6]; $privilege['file.delete'] = (int) $permission[7]; $privilege['permission.grant'] = (int) $permission[8]; $privilege["can_set_share"] = 0; } } if ($fileType == 1) { $isShared = false; $userId = $file['user_id']; //判断下级目录是否有共享目录 $filePath = $file['file_path']; $children = MiniFile::getInstance()->getShowChildrenByPath($currentUserId, $filePath); $userGroupRelation = MiniUserGroupRelation::getInstance()->getByUserId($userId); $groupId = $userGroupRelation['group_id']; $arr = array(); array_push($arr, $groupId); foreach ($children as $child) { $childFilePath = $child['file_path']; if ($childFilePath == $filePath) { continue; } $file = MiniFile::getInstance()->getByFilePath($childFilePath); if ($file['file_type'] == 2) { $isShared = true; break; } } if ($isShared) { //子目录已经共享则不能二次共享 $privilege["can_set_share"] = 0; } else { //判断上级目录是否有共享目录 $arr = explode('/', $filePath); $parentPath = "/" . $userId; for ($i = 2; $i < count($arr); $i++) { $parentPath = $parentPath . "/" . $arr[$i]; $file = MiniFile::getInstance()->getByFilePath($parentPath); if ($file['file_type'] == 2) { $privilege["can_set_share"] = 0; } } } } return $privilege; }
/** * 查询未分组的用户 */ public function unbindUsers($offset, $limit) { $items = UserGroupRelation::model()->findAll(); $value = array(); if (isset($items)) { foreach ($items as $item) { $group = MiniGroup::getInstance()->findById($item->group_id); if (isset($group)) { if ($group['user_id'] > 0) { continue; } } $value[] = $item->user_id; } } $criteria = new CDbCriteria(); $criteria->addNotInCondition('id', $value); $count = User::model()->count($criteria); $criteria->limit = $limit; $criteria->offset = $offset; $users = User::model()->findAll($criteria); $data = array(); $data['users'] = $this->db2list($users); $data['total'] = $count; return $data; }
public function getAllSharedPath($userId) { $userPrivileges = MiniUserPrivilege::getInstance()->getByUserId($userId); $filePaths = array(); foreach ($userPrivileges as $userPrivilege) { array_push($filePaths, $userPrivilege['file_path']); } $groupPrivileges = MiniGroupPrivilege::getInstance()->getAllGroups(); $publicPrivileges = MiniGroupPrivilege::getInstance()->getPublic(); foreach ($publicPrivileges as $publicPrivilege) { array_push($filePaths, $publicPrivilege['file_path']); } $groupIds = array(); foreach ($groupPrivileges as $groupPrivilege) { array_push($groupIds, $groupPrivilege['group_id']); } $groupIdsArr = array(); $userGroupRelations = MiniUserGroupRelation::getInstance()->findUserGroup($userId); if (isset($userGroupRelations)) { foreach ($userGroupRelations as $userRelation) { $groupId = $userRelation['id']; $arr = array(); array_push($arr, $groupId); $result = MiniGroup::getInstance()->findById($groupId); if ($result['user_id'] > 0) { array_push($groupIdsArr, $groupId); } else { $ids = $this->getGroupIds($groupId, $arr); } } array_splice($groupIdsArr, 0, 0, $ids); $commonGroupIds = array_merge($groupIdsArr, $groupIds); foreach ($commonGroupIds as $commonGroupId) { $groupInfos = MiniGroupPrivilege::getInstance()->getByGroupId($commonGroupId); foreach ($groupInfos as $groupInfo) { $paths[] = $groupInfo['file_path']; } } if ($paths) { array_splice($filePaths, 0, 0, $paths); } } $paths = array(); $filePaths = array_unique($filePaths); foreach ($filePaths as $filePath) { $result = MiniFile::getInstance()->getByPath($filePath); if (count($result) == 0) { continue; } //当共享文件为共享者的时候进行过滤 $arr = explode("/", $filePath); $userId = $this->user['id']; $slaveId = $arr[1]; if ($slaveId == $userId) { continue; } $fileBiz = new FileBiz(); $canRead = $fileBiz->privilege($filePath); if (!$canRead) { continue; } $paths[] = $filePath; } return $paths; }
public function saveUser($item, $departmentId) { $errorCount = 0; $errorName = array(); for ($i = 1; $i < count($item); $i++) { if (strlen(trim($item[$i])) == 0) { continue; } $user = MiniUser::getInstance()->getUserByName($item[$i]); if (empty($user)) { $errorCount++; $errorName[] = $item[$i]; continue; } $userGroupRelations = MiniUserGroupRelation::getInstance()->getByUserId($user['id']); $isExist = false; //判断用户是否已经被导入,存在则修改 if (!empty($userGroupRelations)) { foreach ($userGroupRelations as $userGroupRelation) { $group = MiniGroup::getInstance()->getById($userGroupRelation['group_id']); if (!empty($group)) { if ($group['user_id'] > 0) { continue; } else { $isExist = true; break; } } } } $group = MiniGroup::getInstance()->findById($departmentId); if ($isExist) { MiniUserGroupRelation::getInstance()->update($user['id'], $group['id']); } else { MiniUserGroupRelation::getInstance()->create($user['id'], $group['id']); } } if ($errorCount > 0) { $data[] = "该用户不存在,您可以先导入用户,再进行添加"; $data[] = $item[0]; $data[] = $errorName; $this->errorList[] = $data; } }