1 <?php
2 3 4 5 6 7 8
9 class RPermissionDataProvider extends CDataProvider
10 {
11 12 13 14
15 public $displayParentType = false;
16
17 private $_authorizer;
18 private $_roles;
19 private $_items;
20 private $_permissions;
21 private $_parents;
22
23 24 25 26 27 28
29 public function __construct($id, $config=array())
30 {
31 $this->setId($id);
32
33 foreach($config as $key=>$value)
34 $this->$key = $value;
35
36 $this->init();
37 }
38
39 40 41
42 public function init()
43 {
44 $this->_authorizer = Rights::getAuthorizer();
45
46
47 $this->setRoles();
48 $this->setItems();
49 $this->setPermissions();
50 $this->setParents();
51 $this->generateData();
52 }
53
54 55 56
57 protected function setRoles()
58 {
59 $this->_roles = $this->_authorizer->getRoles(false);
60 }
61
62 63 64
65 public function getRoles()
66 {
67 return $this->_roles;
68 }
69
70 71 72
73 protected function setItems()
74 {
75 $type = array(CAuthItem::TYPE_OPERATION, CAuthItem::TYPE_TASK);
76 $this->_items = $this->_authorizer->getAuthItems($type);
77 }
78
79 80 81
82 protected function setPermissions()
83 {
84 $allPermissions = $this->_authorizer->getPermissions();
85
86 $permissions = array();
87 foreach( $this->_roles as $roleName=>$role )
88 {
89 $permissions[ $roleName ] = array();
90 foreach( $this->_items as $itemName=>$item )
91 $permissions[ $roleName ][ $itemName ] = $this->_authorizer->hasPermission($itemName, null, $allPermissions[ $roleName ]);
92 }
93
94
95 $this->_permissions = $permissions;
96 }
97
98 99 100
101 protected function setParents()
102 {
103 $parents = array();
104 foreach( $this->_permissions as $roleName=>$rolePermissions )
105 foreach( $rolePermissions as $itemName=>$permission )
106 if( $permission===Rights::PERM_INHERITED )
107 $parents[ $roleName ][ $itemName ] = $this->_authorizer->getAuthItemParents($itemName, null, $roleName, true);
108
109
110 $this->_parents = $parents;
111 }
112
113 114 115
116 protected function generateData()
117 {
118 $data = array();
119 $permissions = $this->_permissions;
120 $parents = $this->_parents;
121 foreach( $this->_items as $itemName=>$item )
122 {
123 $row = array();
124 $row['description'] = $item->getNameLink();
125
126 foreach( $this->_roles as $roleName=>$role )
127 {
128
129 if( $permissions[ $roleName ][ $itemName ]===Rights::PERM_DIRECT )
130 {
131 $permissionColumn = $item->getRevokePermissionLink($role);
132 }
133
134 else if( $permissions[ $roleName ][ $itemName ]===Rights::PERM_INHERITED && isset($parents[ $roleName ][ $itemName ])===true )
135 {
136 $permissionColumn = $item->getInheritedPermissionText($parents[ $roleName ][ $itemName ], $this->displayParentType);
137 }
138
139 else
140 {
141 $permissionColumn = $item->getAssignPermissionLink($role);
142 }
143
144
145 $row[ strtolower($roleName) ] = isset($permissionColumn)===true ? $permissionColumn : '';
146 }
147
148
149 $data[] = $row;
150 }
151
152 $this->setData($data);
153 }
154
155 156 157 158
159 protected function fetchData()
160 {
161 return $this->getData();
162 }
163
164 165 166 167
168 protected function fetchKeys()
169 {
170 $keys = array();
171 foreach( $this->getData() as $key=>$value )
172 $keys[] = $key;
173
174 return $keys;
175 }
176
177 178 179 180
181 protected function calculateTotalItemCount()
182 {
183 return count($this->getData());
184 }
185 }
186