- Added a new taxus_has() method to check if a privilege exists
This commit is contained in:
		
							parent
							
								
									972d54bd21
								
							
						
					
					
						commit
						f219cf25de
					
				| @ -19,6 +19,7 @@ class Extension implements \Picea\Extension\Extension | |||||||
|     public function register(Context $context) : void |     public function register(Context $context) : void | ||||||
|     { |     { | ||||||
|         $context->pushFunction("taxus", [ $this, 'taxus' ]); |         $context->pushFunction("taxus", [ $this, 'taxus' ]); | ||||||
|  |         $context->pushFunction("taxus_has", [ $this, 'taxusHas' ]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string |     public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string | ||||||
| @ -31,4 +32,8 @@ class Extension implements \Picea\Extension\Extension | |||||||
|         return $this->taxus->granted($name, ...$arguments); |         return $this->taxus->granted($name, ...$arguments); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function taxusHas(string $name) : bool | ||||||
|  |     { | ||||||
|  |         return $this->taxus->hasPrivilege($name); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,14 +4,26 @@ namespace Taxus; | |||||||
| 
 | 
 | ||||||
| class Taxus | class Taxus | ||||||
| { | { | ||||||
|     protected PermissionGrantInterface $gate; |     # @ArrayOf Privilege
 | ||||||
|  |     protected array $list = []; | ||||||
| 
 | 
 | ||||||
|     public function __construct(PermissionGrantInterface $gate) |     # @ArrayOf PermissionGrantInterface
 | ||||||
|  |     protected array $gates = []; | ||||||
|  | 
 | ||||||
|  |     public function __construct(PermissionGrantInterface ... $gate,) | ||||||
|     { |     { | ||||||
|         $this->gate = $gate; |         $this->pushGate(... $gate); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     protected array $list; |     public function pushGate(PermissionGrantInterface ... $gates) : void | ||||||
|  |     { | ||||||
|  |         $this->gates = array_merge($this->gates, $gates); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function hasPrivilege(string $name) : bool | ||||||
|  |     { | ||||||
|  |         return isset($this->list[$name]); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     public function add(...$privileges) : self |     public function add(...$privileges) : self | ||||||
|     { |     { | ||||||
| @ -44,6 +56,17 @@ class Taxus | |||||||
| 
 | 
 | ||||||
|         $callback = $this->list[$name][1] ?? 'default'; |         $callback = $this->list[$name][1] ?? 'default'; | ||||||
| 
 | 
 | ||||||
|         return $this->gate->$callback(...$arguments); |         foreach($this->gates as $gate) { | ||||||
|  |             if ( method_exists($gate, $callback) ) { | ||||||
|  |                 return $gate->$callback(...$arguments); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         throw new \Exception( | ||||||
|  |             sprintf( | ||||||
|  |                 "Method '$callback' could not be found from given gates list: %s", | ||||||
|  |                 implode(', ', array_map(fn($e) => $e::class, $this->gates)) | ||||||
|  |             ) | ||||||
|  |         ); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user