2
2
3
3
namespace Matteoc99 \LaravelPreference \Traits ;
4
4
5
+ use Illuminate \Auth \Access \AuthorizationException ;
5
6
use Illuminate \Database \Eloquent \Relations \MorphMany ;
6
7
use Illuminate \Support \Collection ;
8
+ use Illuminate \Support \Facades \Auth ;
7
9
use Illuminate \Support \Facades \Validator ;
8
10
use Illuminate \Validation \ValidationException ;
9
11
use Matteoc99 \LaravelPreference \Contracts \PreferenceGroup ;
12
+ use Matteoc99 \LaravelPreference \Enums \PolicyAction ;
10
13
use Matteoc99 \LaravelPreference \Exceptions \PreferenceNotFoundException ;
11
14
use Matteoc99 \LaravelPreference \Models \Preference ;
12
15
use Matteoc99 \LaravelPreference \Models \UserPreference ;
@@ -32,6 +35,7 @@ private function userPreferences(): MorphMany
32
35
*/
33
36
public function getPreference (PreferenceGroup $ name , mixed $ default = null ): mixed
34
37
{
38
+ $ this ->authorize (PolicyAction::GET );
35
39
SerializeHelper::conformNameAndGroup ($ name , $ group );
36
40
/**@var string $name * */
37
41
$ preference = $ this ->validateAndRetrievePreference ($ name , $ group );
@@ -43,19 +47,6 @@ public function getPreference(PreferenceGroup $name, mixed $default = null): mix
43
47
return $ userPreference ?->value ?? $ this ->getDefaultPreferenceValue ($ name , $ group ) ?? $ default ;
44
48
}
45
49
46
- /**
47
- * Retrieve the default value for a preference from its configuration.
48
- *
49
- * @param string $name
50
- * @param string $group
51
- *
52
- * @return mixed
53
- */
54
- private function getDefaultPreferenceValue (string $ name , string $ group ): mixed
55
- {
56
- return Preference::where ('group ' , $ group )->where ('name ' , $ name )->first ()?->default_value ?? null ;
57
- }
58
-
59
50
/**
60
51
* Set a preference value, handling validation and persistence.
61
52
*
@@ -67,6 +58,7 @@ private function getDefaultPreferenceValue(string $name, string $group): mixed
67
58
*/
68
59
public function setPreference (PreferenceGroup $ name , mixed $ value ): void
69
60
{
61
+ $ this ->authorize (PolicyAction::UPDATE );
70
62
71
63
SerializeHelper::conformNameAndGroup ($ name , $ group );
72
64
/**@var string $name * */
@@ -93,6 +85,8 @@ public function setPreference(PreferenceGroup $name, mixed $value): void
93
85
*/
94
86
public function removePreference (PreferenceGroup $ name ): int
95
87
{
88
+ $ this ->authorize (PolicyAction::DELETE );
89
+
96
90
SerializeHelper::conformNameAndGroup ($ name , $ group );
97
91
/**@var string $name * */
98
92
$ preference = $ this ->validateAndRetrievePreference ($ name , $ group );
@@ -109,6 +103,8 @@ public function removePreference(PreferenceGroup $name): int
109
103
*/
110
104
public function getPreferences (string $ group = null ): Collection
111
105
{
106
+ $ this ->authorize (PolicyAction::INDEX );
107
+
112
108
$ query = $ this ->userPreferences ()->with ('preference ' );
113
109
114
110
if ($ group ) {
@@ -130,4 +126,17 @@ private function validateAndRetrievePreference(string $name, string $group): Pre
130
126
}
131
127
return $ preference ;
132
128
}
129
+
130
+
131
+ private function getDefaultPreferenceValue (string $ name , string $ group ): mixed
132
+ {
133
+ return Preference::where ('group ' , $ group )->where ('name ' , $ name )->first ()?->default_value ?? null ;
134
+ }
135
+
136
+ private function authorize (PolicyAction $ action ): void
137
+ {
138
+ if (!$ this ->isUserAuthorized (Auth::user (), $ action )) {
139
+ throw new AuthorizationException ("the user is not authorized to perform the action: " . $ action ->name );
140
+ }
141
+ }
133
142
}
0 commit comments