2
2
3
3
namespace Laravel \Nova \DevTool ;
4
4
5
+ use Illuminate \Contracts \Auth \Access \Gate as GateContract ;
5
6
use Illuminate \Support \Str ;
6
7
use Laravel \Nova \Actions \ActionResource ;
7
8
use Laravel \Nova \Nova ;
@@ -19,21 +20,29 @@ public static function resourcesIn(string $directory): void
19
20
{
20
21
$ namespace = Workbench::detectNamespace ('app ' );
21
22
23
+ /** @var array<int, class-string<\Laravel\Nova\Resource>> $resources */
22
24
$ resources = [];
23
25
26
+ $ gate = app (GateContract::class);
27
+
24
28
foreach ((new Finder )->in ($ directory )->files () as $ resource ) {
25
- $ resource = $ namespace .str_replace (
29
+ /** @var class-string<\Laravel\Nova\Resource> $resourceClass */
30
+ $ resourceClass = $ namespace .str_replace (
26
31
['/ ' , '.php ' ],
27
32
['\\' , '' ],
28
33
Str::after ($ resource ->getPathname (), Workbench::path ('app ' ).DIRECTORY_SEPARATOR )
29
34
);
30
35
31
36
if (
32
- is_subclass_of ($ resource , Resource::class) &&
33
- ! (new ReflectionClass ($ resource ))->isAbstract () &&
34
- ! is_subclass_of ($ resource , ActionResource::class)
37
+ is_subclass_of ($ resourceClass , Resource::class) &&
38
+ ! (new ReflectionClass ($ resourceClass ))->isAbstract () &&
39
+ ! is_subclass_of ($ resourceClass , ActionResource::class)
35
40
) {
36
- $ resources [] = $ resource ;
41
+ $ resources [] = $ resourceClass ;
42
+ }
43
+
44
+ if (property_exists ($ resourceClass , 'policy ' ) && ! is_null ($ resourceClass ::$ policy )) {
45
+ $ gate ->policy ($ resourceClass , $ resourceClass ::$ policy );
37
46
}
38
47
}
39
48
0 commit comments