File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22
33namespace Utopia \Database \Validator ;
44
5+ use Utopia \Database \Helpers \Role ;
56use Utopia \Validator ;
67
78class Authorization extends Validator
@@ -23,6 +24,11 @@ class Authorization extends Validator
2324 */
2425 protected string $ message = 'Authorization Error ' ;
2526
27+ /**
28+ * @var string|null
29+ */
30+ protected static ?string $ user = null ;
31+
2632 /**
2733 * @param string $action
2834 */
@@ -82,6 +88,10 @@ public function isValid($permissions): bool
8288 */
8389 public static function setRole (string $ role ): void
8490 {
91+ $ userIdetifier = Role::parse ($ role )->getIdentifier ();
92+ if ($ userIdetifier ) {
93+ self ::$ user = $ userIdetifier ;
94+ }
8595 self ::$ roles [$ role ] = true ;
8696 }
8797
@@ -92,9 +102,23 @@ public static function setRole(string $role): void
92102 */
93103 public static function unsetRole (string $ role ): void
94104 {
105+ $ userIdetifier = Role::parse ($ role )->getIdentifier ();
106+ if ($ userIdetifier && self ::$ user == $ userIdetifier ) {
107+ self ::$ user = null ;
108+ }
95109 unset(self ::$ roles [$ role ]);
96110 }
97111
112+ /**
113+ * Get current user
114+ *
115+ * @return string|null
116+ */
117+ public static function getUser (): string |null
118+ {
119+ return self ::$ user ;
120+ }
121+
98122 /**
99123 * @return array<string>
100124 */
Original file line number Diff line number Diff line change @@ -119,4 +119,24 @@ public function testNestedSkips(): void
119119
120120 $ this ->assertEquals (true , Authorization::$ status );
121121 }
122+
123+ public function testSetUserFromRoles (): void
124+ {
125+ $ currentUserRole = Role::user ("123 " );
126+ Authorization::setRole (Role::user ("123 " )->toString ());
127+ $ this ->assertEquals ($ currentUserRole ->getIdentifier (), Authorization::getUser ());
128+
129+ $ roles = [];
130+ $ roles [] = Role::user ("123 " );
131+ $ roles [] = Role::user ("123 " , 'verififed ' );
132+ $ roles [] = Role::user ("126 " , 'unverififed ' );
133+ $ roles [] = Role::any ();
134+ $ roles [] = Role::users ();
135+
136+ foreach ($ roles as $ role ) {
137+ Authorization::setRole ($ role ->toString ());
138+ }
139+ $ expectedRole = Role::user ("126 " , 'unverififed ' );
140+ $ this ->assertEquals ($ expectedRole ->getIdentifier (), Authorization::getUser ());
141+ }
122142}
You can’t perform that action at this time.
0 commit comments