1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
rightsmanager.php
См. документацию.
1<?php
2namespace Bitrix\Report;
3
4use Bitrix\Main\Loader;
5use Bitrix\Socialnetwork\UserToGroupTable;
6use CPHPCache;
7
9{
10 const ACCESS_READ = 'access_read';
11 const ACCESS_EDIT = 'access_edit';
12 const ACCESS_FULL = 'access_full';
13
14 protected $userId;
15
16 public function __construct($userId)
17 {
18 $this->userId = intval($userId);
19 }
20
26 public function canRead($reportId)
27 {
28 if(!$this->isOwner($reportId))
29 {
30 $listSharing = Sharing::getEntityOfSharing($reportId);
31 $listEntity = $this->getGroupsAndDepartments();
32 foreach($listSharing as $sharingRow)
33 {
34 if(in_array($sharingRow['ENTITY'], $listEntity))
35 {
36 if($this->compareAccess($sharingRow['RIGHTS'], self::ACCESS_READ) >= 0)
37 return true;
38 }
39 }
40 return false;
41 }
42 return true;
43 }
44
50 public function canEdit($reportId)
51 {
52 if(!$this->isOwner($reportId))
53 {
54 $listSharing = Sharing::getEntityOfSharing($reportId);
55 $listEntity = $this->getGroupsAndDepartments();
56 foreach($listSharing as $sharingRow)
57 {
58 if(in_array($sharingRow['ENTITY'], $listEntity))
59 {
60 if($this->compareAccess($sharingRow['RIGHTS'], self::ACCESS_EDIT) >= 0)
61 return true;
62 }
63 }
64 return false;
65 }
66 return true;
67 }
68
74 public function canDelete($reportId)
75 {
76 return $this->isOwner($reportId);
77 }
78
84 public function canShare($reportId)
85 {
86 return $this->isOwner($reportId);
87 }
88
95 public function getGroupsAndDepartments()
96 {
97 $cacheTime = defined('BX_COMP_MANAGED_CACHE') ? 3153600 : 3600*4;
98 $cacheId = 'report-sharing-rights-'.$this->userId;
99 $cacheDir = '/report/sharing/rights/'.$this->userId;
100 $cache = new CPHPCache;
101 if($cache->initCache($cacheTime, $cacheId, $cacheDir))
102 {
103 $listEntity = $cache->getVars();
104 }
105 else
106 {
107 global $CACHE_MANAGER;
108 $cache->startDataCache();
109 $listEntity = array(Sharing::CODE_USER.$this->userId);
110 $userObject = \CUser::getByID($this->userId);
111 if($userData = $userObject->fetch())
112 {
113 if(Loader::includeModule('socialnetwork'))
114 {
115 $queryObject = UserToGroupTable::getList(array(
116 'select' => array('GROUP_ID'),
117 'filter' => array(
118 'USER_ID' => $userData['ID'],
119 'ROLE' => array(
120 UserToGroupTable::ROLE_USER,
121 UserToGroupTable::ROLE_MODERATOR,
122 UserToGroupTable::ROLE_OWNER
123 )
124 )
125 ));
126 while ($groupData = $queryObject->fetch())
127 $listEntity[] = Sharing::CODE_SOCNET_GROUP.$groupData['GROUP_ID'];
128 }
129
130 if(!empty($userData['UF_DEPARTMENT']) && Loader::includeModule('iblock'))
131 {
132 foreach($userData['UF_DEPARTMENT'] as $departmentId)
133 {
134 $res = \CIBlockSection::GetNavChain(0, $departmentId);
135 while ($row = $res->Fetch())
136 {
137 $listEntity[] = Sharing::CODE_DEPARTMENT . $row['ID'];
138 }
139 }
140 }
141 }
142 $CACHE_MANAGER->startTagCache($cacheDir);
143 $CACHE_MANAGER->registerTag("sonet_user2group_U".$this->userId);
144 $CACHE_MANAGER->registerTag("USER_CARD_".intval($this->userId/TAGGED_user_card_size));
145 $CACHE_MANAGER->endTagCache();
146 $cache->endDataCache($listEntity);
147 }
148
149 return $listEntity;
150 }
151
152 private function isOwner($reportId)
153 {
154 $reportId = intval($reportId);
155
156 $hasReport = ReportTable::getCount(
157 array('=ID' => $reportId, '=CREATED_BY' => $this->userId));
158
159 if($hasReport)
160 return true;
161 else
162 return false;
163 }
164
172 private function compareAccess($access1, $access2)
173 {
174 switch($access1)
175 {
176 case 'access_read':
177 self::ACCESS_READ;
178 $access1Pos = 2;
179 break;
180 case 'access_edit':
181 self::ACCESS_EDIT;
182 $access1Pos = 3;
183 break;
184 case 'access_full':
185 self::ACCESS_FULL;
186 $access1Pos = 4;
187 break;
188 default:
189 $access1Pos = -1;
190 }
191 switch($access2)
192 {
193 case 'access_read':
194 self::ACCESS_READ;
195 $access2Pos = 2;
196 break;
197 case 'access_edit':
198 self::ACCESS_EDIT;
199 $access2Pos = 3;
200 break;
201 case 'access_full':
202 self::ACCESS_FULL;
203 $access2Pos = 4;
204 break;
205 default:
206 $access2Pos = -1;
207 }
208
209 if($access1Pos == $access2Pos)
210 return 0;
211
212 return $access1Pos > $access2Pos? 1 : -1;
213 }
214}
__construct($userId)
Определения rightsmanager.php:16
const ACCESS_EDIT
Определения rightsmanager.php:11
const ACCESS_READ
Определения rightsmanager.php:10
const ACCESS_FULL
Определения rightsmanager.php:12
canEdit($reportId)
Определения rightsmanager.php:50
getGroupsAndDepartments()
Определения rightsmanager.php:95
canRead($reportId)
Определения rightsmanager.php:26
canShare($reportId)
Определения rightsmanager.php:84
canDelete($reportId)
Определения rightsmanager.php:74
const CODE_SOCNET_GROUP
Определения sharing.php:20
const CODE_DEPARTMENT
Определения sharing.php:21
static getEntityOfSharing($reportId)
Определения sharing.php:113
const CODE_USER
Определения sharing.php:18
global $CACHE_MANAGER
Определения clear_component_cache.php:7
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7