@@ -50,7 +50,7 @@ public function scopeRole($query, $roles)
5050 $ roles = $ roles ->toArray ();
5151 }
5252
53- if (! is_array ($ roles )) {
53+ if (!is_array ($ roles )) {
5454 $ roles = [$ roles ];
5555 }
5656
@@ -65,7 +65,7 @@ public function scopeRole($query, $roles)
6565 return $ query ->whereHas ('roles ' , function ($ query ) use ($ roles ) {
6666 $ query ->where (function ($ query ) use ($ roles ) {
6767 foreach ($ roles as $ role ) {
68- $ query ->orWhere (config ('laravel-authorisation.table_names.roles ' ). '.id ' , $ role ->id );
68+ $ query ->orWhere (config ('laravel-authorisation.table_names.roles ' ) . '.id ' , $ role ->id );
6969 }
7070 });
7171 });
@@ -127,12 +127,24 @@ public function syncRoles(...$roles)
127127 */
128128 public function hasRole ($ roles )
129129 {
130+ $ allroles = new Collection ();
131+ if ($ this ->roles instanceof Collection) {
132+ foreach ($ this ->roles as $ role ) {
133+ $ parent = $ role ->parentrole ;
134+ while (!is_null ($ parent )) {
135+ $ allroles ->push ($ parent );
136+ $ parent = $ parent ->parentrole ;
137+ }
138+ }
139+ $ allroles = $ allroles ->merge ($ this ->roles )->unique ('id ' )->values ();
140+ }
141+
130142 if (is_string ($ roles )) {
131- return $ this -> roles ->contains ('name ' , $ roles );
143+ return $ allroles ->contains ('name ' , $ roles );
132144 }
133145
134146 if ($ roles instanceof Role) {
135- return $ this -> roles ->contains ('id ' , $ roles ->id );
147+ return $ allroles ->contains ('id ' , $ roles ->id );
136148 }
137149
138150 if (is_array ($ roles )) {
@@ -145,7 +157,7 @@ public function hasRole($roles)
145157 return false ;
146158 }
147159
148- return (bool ) $ roles ->intersect ($ this -> roles )->count ();
160+ return (bool )$ roles ->intersect ($ allroles )->count ();
149161 }
150162
151163 /**
@@ -169,19 +181,31 @@ public function hasAnyRole($roles)
169181 */
170182 public function hasAllRoles ($ roles )
171183 {
184+ $ allroles = new Collection ();
185+ if ($ this ->roles instanceof Collection) {
186+ foreach ($ this ->roles as $ role ) {
187+ $ parent = $ role ->parentrole ;
188+ while (!is_null ($ parent )) {
189+ $ allroles ->push ($ parent );
190+ $ parent = $ parent ->parentrole ;
191+ }
192+ }
193+ $ allroles = $ allroles ->merge ($ this ->roles )->unique ('id ' )->values ();
194+ }
195+
172196 if (is_string ($ roles )) {
173- return $ this -> roles ->contains ('name ' , $ roles );
197+ return $ allroles ->contains ('name ' , $ roles );
174198 }
175199
176200 if ($ roles instanceof Role) {
177- return $ this -> roles ->contains ('id ' , $ roles ->id );
201+ return $ allroles ->contains ('id ' , $ roles ->id );
178202 }
179203
180204 $ roles = collect ()->make ($ roles )->map (function ($ role ) {
181205 return $ role instanceof Role ? $ role ->name : $ role ;
182206 });
183207
184- return $ roles ->intersect ($ this -> roles ->pluck ('name ' )) == $ roles ;
208+ return $ roles ->intersect ($ allroles ->pluck ('name ' )) == $ roles ;
185209 }
186210
187211 /**
@@ -256,7 +280,7 @@ public function hasDirectPermission($permission)
256280 if (is_string ($ permission )) {
257281 $ permission = app (Permission::class)->findByName ($ permission );
258282
259- if (! $ permission ) {
283+ if (!$ permission ) {
260284 return false ;
261285 }
262286 }
0 commit comments