1- <?php namespace GeneaLabs \LaravelGovernor \Traits ;
1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace GeneaLabs \LaravelGovernor \Traits ;
26
37use Illuminate \Database \Eloquent \Builder ;
48use Illuminate \Database \Eloquent \Relations \BelongsTo ;
59use Illuminate \Database \Eloquent \Relations \MorphToMany ;
610use Illuminate \Support \Collection ;
11+ use Illuminate \Support \Facades \Cache ;
712
813trait Governable
914{
1015 use EntityManagement;
1116
12- protected function applyPermissionToQuery (Builder $ query , string $ ability ) : Builder
17+ protected function applyPermissionToQuery (Builder $ query , string $ ability ): Builder
1318 {
1419 $ entityName = $ this ->getEntityFromModel (get_class ($ this ));
1520 $ ownerships = $ this ->getOwnershipsForEntity ($ entityName , $ ability );
16-
21+
1722 return $ this ->filterQuery ($ query , $ ownerships );
1823 }
1924
20- protected function filterQuery (Builder $ query , Collection $ ownerships ) : Builder
25+ protected function filterQuery (Builder $ query , Collection $ ownerships ): Builder
2126 {
2227 if ($ ownerships ->contains ("any " )
2328 || auth ()->user ()->hasRole ("SuperAdmin " )
@@ -52,7 +57,7 @@ protected function filterQuery(Builder $query, Collection $ownerships) : Builder
5257 if ($ query ->getModel ()->getTable () === $ authTable ) {
5358 return $ query ->where ($ query ->getModel ()->getKeyName (), auth ()->user ()->getKey ());
5459 }
55-
60+
5661 return $ query ->where (
5762 "{$ query ->getModel ()->getTable ()}.governor_owned_by " ,
5863 auth ()->user ()->getKey ()
@@ -62,29 +67,39 @@ protected function filterQuery(Builder $query, Collection $ownerships) : Builder
6267 return $ query ->whereRaw ("1 = 2 " );
6368 }
6469
65- protected function getOwnershipsForEntity (string $ entityName , string $ ability ) : Collection
66- {
70+ protected function getOwnershipsForEntity (
71+ string $ entityName ,
72+ string $ ability ,
73+ ): Collection {
6774 if (! $ entityName ) {
6875 return collect ();
6976 }
7077
71- $ result = app ("governor-permissions " )
72- ->where ("action_name " , $ ability )
73- ->where ("entity_name " , $ entityName )
74- ->pluck ("ownership_name " );
78+ $ permissionClass = app (config ('genealabs-laravel-governor.models.permission ' ));
79+ $ result = Cache::remember (
80+ "governor-permissions " ,
81+ 5 ,
82+ function () use ($ ability , $ entityName , $ permissionClass ) {
83+ return (new $ permissionClass )
84+ ->select ("ownership_name " )
85+ ->where ("action_name " , $ ability )
86+ ->where ("entity_name " , $ entityName )
87+ ->get ();
88+ },
89+ );
7590
7691 return $ result ;
7792 }
7893
79- public function ownedBy () : BelongsTo
94+ public function ownedBy (): BelongsTo
8095 {
8196 return $ this ->belongsTo (
8297 config ("genealabs-laravel-governor.models.auth " ),
8398 "governor_owned_by "
8499 );
85100 }
86101
87- public function teams () : MorphToMany
102+ public function teams (): MorphToMany
88103 {
89104 return $ this ->MorphToMany (
90105 config ("genealabs-laravel-governor.models.team " ),
@@ -93,32 +108,32 @@ public function teams() : MorphToMany
93108 );
94109 }
95110
96- public function scopeDeletable (Builder $ query ) : Builder
111+ public function scopeDeletable (Builder $ query ): Builder
97112 {
98113 return $ this ->applyPermissionToQuery ($ query , "delete " );
99114 }
100115
101- public function scopeForceDeletable (Builder $ query ) : Builder
116+ public function scopeForceDeletable (Builder $ query ): Builder
102117 {
103118 return $ this ->applyPermissionToQuery ($ query , "forceDelete " );
104119 }
105120
106- public function scopeRestorable (Builder $ query ) : Builder
121+ public function scopeRestorable (Builder $ query ): Builder
107122 {
108123 return $ this ->applyPermissionToQuery ($ query , "restore " );
109124 }
110125
111- public function scopeUpdatable (Builder $ query ) : Builder
126+ public function scopeUpdatable (Builder $ query ): Builder
112127 {
113128 return $ this ->applyPermissionToQuery ($ query , "update " );
114129 }
115130
116- public function scopeViewable (Builder $ query ) : Builder
131+ public function scopeViewable (Builder $ query ): Builder
117132 {
118133 return $ this ->applyPermissionToQuery ($ query , "view " );
119134 }
120135
121- public function scopeViewAnyable (Builder $ query ) : Builder
136+ public function scopeViewAnyable (Builder $ query ): Builder
122137 {
123138 return $ this ->applyPermissionToQuery ($ query , "viewAny " );
124139 }
0 commit comments