@@ -113,6 +113,40 @@ public static function getSexList()
113
113
2 => Module::t ('Female ' ),
114
114
];
115
115
}
116
+
117
+ public static function getAccessList ($ user_id )
118
+ {
119
+ $ controllersAccessList = Yii::$ app ->getModule ('user ' )->controllersAccessList ;
120
+
121
+ $ roles = Roles::getRolesByUserId ($ user_id );
122
+
123
+ $ list = [];
124
+ foreach ($ roles as $ role ) {
125
+ if ($ role ->code == 'admin ' ) {
126
+ $ list = array_combine (array_keys ($ controllersAccessList ), ['* ' ]);
127
+ break ;
128
+ }
129
+
130
+ foreach ($ role ->getParametersList () as $ controller_id => $ actions ) {
131
+ if ($ actions == '* ' ) {
132
+ $ list [$ controller_id ] = '* ' ;
133
+ break ;
134
+ }
135
+
136
+ $ arrAction = explode (', ' , $ actions );
137
+
138
+ if (isset ($ list [$ controller_id ]) && $ list [$ controller_id ] != '* ' ) {
139
+ $ arr = explode (', ' , $ list [$ controller_id ]);
140
+
141
+ $ list [$ controller_id ] = array_merge ($ arr , $ arrAction );
142
+ } else if (!isset ($ list [$ controller_id ])) {
143
+ $ list [$ controller_id ] = $ actions ;
144
+ }
145
+ }
146
+ }
147
+
148
+ return $ list ;
149
+ }
116
150
117
151
/**
118
152
* Checking the ability to perform the action of the selected controller
@@ -123,27 +157,22 @@ public static function getSexList()
123
157
*/
124
158
public static function isActionAllowed ($ user_id , $ controller_id , $ action )
125
159
{
126
- $ roles_id = \yii \helpers \ArrayHelper::getColumn (
127
- UserRoles::find ()->select ('role_id ' )->where (['user_id ' => $ user_id ])->asArray ()->all (),
128
- 'role_id '
129
- );
130
-
131
- $ roles = \yii \helpers \ArrayHelper::getColumn (
132
- Roles::find ()
133
- ->select ('code ' )
134
- ->where (['IN ' , 'id ' , $ roles_id ])
135
- ->asArray ()
136
- ->all (),
137
- 'code '
138
- );
139
-
160
+ // check god mode
161
+ $ roles = \yii \helpers \ArrayHelper::getColumn (UserRoles::getUserRoles ($ user_id ), 'code ' );
140
162
if (in_array ('admin ' , $ roles )) {
141
163
return true ;
142
164
}
143
165
144
- //other checking
166
+ // check access
167
+ $ accessList = static ::getAccessList ($ user_id );
168
+
169
+ if (!isset ($ accessList [$ controller_id ])) {
170
+ return false ;
171
+ }
172
+
173
+ $ arr = explode (', ' , $ accessList [$ controller_id ]);
145
174
146
- return false ;
175
+ return ( $ accessList [ $ controller_id ] == ' * ' || in_array ( $ action , $ arr ));
147
176
}
148
177
149
178
/**
0 commit comments