DomainLimitTrait.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. trait DomainLimitTrait
  3. {
  4. /**
  5. * @param array|User|null $limitedBy
  6. *
  7. * @return bool
  8. */
  9. public function isInLimitedDomains($limitedBy = null)
  10. {
  11. if(!defined('ADMIN_DOMAIN_LIMITS_ENABLED')) {
  12. return true;
  13. }
  14. if(is_null($limitedBy)){
  15. return static::isInLimitedDomains(Auth::getUser());
  16. }
  17. elseif($limitedBy instanceof User) {
  18. /** @var User $limitedBy */
  19. return $limitedBy->isDomainLimited() && static::isInLimitedDomains($limitedBy->getDomainLimits());
  20. }
  21. if(!is_array($limitedBy)){
  22. throw new InvalidArgumentException;
  23. }
  24. /** @var string|array|string[] $domain */
  25. $domain = $this->getDomain();
  26. if(is_string($domain)) {
  27. return in_array($domain, $limitedBy);
  28. }
  29. foreach($domain as $d){
  30. if(!in_array($d, $limitedBy)) {
  31. return false;
  32. }
  33. }
  34. return true;
  35. }
  36. /**
  37. * @param ModelCollection|static[] $collection
  38. * @param array|User|null $limitedBy
  39. *
  40. * @return ModelCollection|static[]
  41. */
  42. protected static function filterModelCollectionByLimitedDomains($collection, $limitedBy = null)
  43. {
  44. return $collection->searchAll(function($model) use ($limitedBy){
  45. /** @var static $model */
  46. return $model->isInLimitedDomains($limitedBy);
  47. });
  48. }
  49. /**
  50. * @param array|User|null $limitedBy
  51. *
  52. * @return ModelCollection|static[]
  53. */
  54. public static function getByLimitedDomains($limitedBy = null)
  55. {
  56. return static::filterModelCollectionByLimitedDomains(static::findAll(), $limitedBy);
  57. }
  58. }