From 949ea3d5239ec5a4d45fedf6cf03bdd9f37e630a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 20 Feb 2023 19:52:50 +1100 Subject: [PATCH] Add excludable permissions for client view list --- app/Http/Controllers/BaseController.php | 76 ++++--- app/Http/Controllers/UserController.php | 4 +- app/Models/User.php | 7 +- .../MailCssInlinerServiceProvider.php | 52 ----- app/Utils/CssInlinerPlugin.php | 140 ------------- composer.json | 1 - composer.lock | 189 +++++++++--------- config/app.php | 1 - config/css-inliner.php | 18 -- tests/Unit/PermissionsTest.php | 7 + 10 files changed, 143 insertions(+), 352 deletions(-) delete mode 100644 app/Providers/MailCssInlinerServiceProvider.php delete mode 100644 app/Utils/CssInlinerPlugin.php delete mode 100644 config/css-inliner.php diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index dfa4f39cc6c6..fabe72d4437d 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -11,33 +11,34 @@ namespace App\Http\Controllers; -use App\Models\Account; -use App\Models\BankIntegration; -use App\Models\BankTransaction; -use App\Models\BankTransactionRule; -use App\Models\CompanyGateway; +use App\Models\User; +use App\Utils\Ninja; +use App\Models\Client; use App\Models\Design; -use App\Models\ExpenseCategory; -use App\Models\GroupSetting; -use App\Models\PaymentTerm; +use App\Utils\Statics; +use App\Models\Account; +use App\Models\TaxRate; +use App\Models\Webhook; use App\Models\Scheduler; use App\Models\TaskStatus; -use App\Models\TaxRate; -use App\Models\User; -use App\Models\Webhook; -use App\Transformers\ArraySerializer; -use App\Transformers\EntityTransformer; -use App\Utils\Ninja; -use App\Utils\Statics; -use App\Utils\Traits\AppSetup; -use Illuminate\Contracts\Container\BindingResolutionException; -use Illuminate\Database\Eloquent\Builder; +use App\Models\PaymentTerm; use Illuminate\Support\Str; use League\Fractal\Manager; -use League\Fractal\Pagination\IlluminatePaginatorAdapter; -use League\Fractal\Resource\Collection; +use App\Models\GroupSetting; +use App\Models\CompanyGateway; +use App\Utils\Traits\AppSetup; +use App\Models\BankIntegration; +use App\Models\BankTransaction; +use App\Models\ExpenseCategory; use League\Fractal\Resource\Item; +use App\Models\BankTransactionRule; +use App\Transformers\ArraySerializer; +use App\Transformers\EntityTransformer; +use League\Fractal\Resource\Collection; +use Illuminate\Database\Eloquent\Builder; use League\Fractal\Serializer\JsonApiSerializer; +use League\Fractal\Pagination\IlluminatePaginatorAdapter; +use Illuminate\Contracts\Container\BindingResolutionException; /** * Class BaseController. @@ -68,7 +69,13 @@ class BaseController extends Controller protected $serializer; - private array $client_exclusion_fields = ['balance','paid_to_date', 'credit_balance','client_hash']; + /* Grouped permissions when we want to hide columns for particular permission groups*/ + private array $client_exclusion_fields = ['balance', 'paid_to_date', 'credit_balance', 'client_hash']; + private array $client_excludable_permissions = ['view_client']; + private array $client_excludable_overrides = ['edit_client', 'edit_all', 'view_invoice', 'view_all', 'edit_invoice']; + /* Grouped permissions when we want to hide columns for particular permission groups*/ + + /** * Fractal manager. * @var object @@ -293,7 +300,10 @@ class BaseController extends Controller $query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id); }); } - + + if ($user->hasExcludedPermissions($this->client_excludable_permissions, $this->client_excludable_overrides)) { + $query->exclude($this->client_exclusion_fields); + } }, 'company.company_gateways' => function ($query) use ($user) { $query->whereNotNull('updated_at')->with('gateway'); @@ -489,7 +499,6 @@ class BaseController extends Controller ); if ($query instanceof Builder) { - $limit = $this->resolveQueryLimit(); $paginator = $query->paginate($limit); @@ -499,11 +508,8 @@ class BaseController extends Controller $resource = new Collection($query, $transformer, $this->entity_type); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); - } else { - $resource = new Collection($query, $transformer, $this->entity_type); - } return $this->response($this->manager->createData($resource)->toArray()); @@ -657,10 +663,9 @@ class BaseController extends Controller }); } - if($user->hasIntersectPermissions(['view_client'])){ + if ($user->hasExcludedPermissions($this->client_excludable_permissions, $this->client_excludable_overrides)) { $query->exclude($this->client_exclusion_fields); } - }, 'company.company_gateways' => function ($query) use ($user) { $query->whereNotNull('created_at')->with('gateway'); @@ -871,32 +876,25 @@ class BaseController extends Controller $query->with($includes); if (auth()->user() && ! auth()->user()->hasPermission('view_'.Str::snake(class_basename($this->entity_type)))) { - if (in_array($this->entity_type, [User::class])) { - $query->where('id', auth()->user()->id); - } elseif (in_array($this->entity_type, [BankTransactionRule::class,CompanyGateway::class, TaxRate::class, BankIntegration::class, Scheduler::class, BankTransaction::class, Webhook::class, ExpenseCategory::class])) { //table without assigned_user_id - if ($this->entity_type == BankIntegration::class && !auth()->user()->isSuperUser() && auth()->user()->hasIntersectPermissions(['create_bank_transaction','edit_bank_transaction','view_bank_transaction'])) { $query->exclude(["balance"]); } //allows us to selective display bank integrations back to the user if they can view / create bank transactions but without the bank balance being present in the response else { $query->where('user_id', '=', auth()->user()->id); } - } elseif (in_array($this->entity_type, [Design::class, GroupSetting::class, PaymentTerm::class, TaskStatus::class])) { // nlog($this->entity_type); } else { - $query->where('user_id', '=', auth()->user()->id)->orWhere('assigned_user_id', auth()->user()->id); - } } - - // if(auth()->user()->hasIntersectPermissions(['view_client'])){ - // $query->exclude($this->client_exclusion_fields); - // } + + if ($this->entity_type == Client::class && auth()->user()->hasExcludedPermissions($this->client_excludable_permissions, $this->client_excludable_overrides)) { + $query->exclude($this->client_exclusion_fields); + } if (request()->has('updated_at') && request()->input('updated_at') > 0) { $query->where('updated_at', '>=', date('Y-m-d H:i:s', intval(request()->input('updated_at')))); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 8cccb0a93fc6..a186d7f26d51 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -75,8 +75,8 @@ class UserController extends BaseController * tags={"users"}, * summary="Gets a list of users", * description="Lists users, search and filters allow fine grained lists to be generated. - - Query parameters can be added to performed more fine grained filtering of the users, these are handled by the UserFilters class which defines the methods available", + * + *Query parameters can be added to performed more fine grained filtering of the users, these are handled by the UserFilters class which defines the methods available", * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), * @OA\Parameter(ref="#/components/parameters/include"), diff --git a/app/Models/User.php b/app/Models/User.php index 72be4ac4e967..6c982c86907e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -392,8 +392,7 @@ class User extends Authenticatable implements MustVerifyEmail } } - return $this->isOwner() || - $this->isAdmin() || + return $this->isSuperUser() || (stripos($this->token()->cu->permissions, $permission) !== false) || (stripos($this->token()->cu->permissions, $all_permission) !== false) || (stripos($this->token()->cu->permissions, $edit_all) !== false) || @@ -505,24 +504,26 @@ class User extends Authenticatable implements MustVerifyEmail public function hasExcludedPermissions(array $matched_permission = [], array $excluded_permissions = []): bool { if ($this->isSuperUser()) { + nlog("returning false as is superuser"); return false; } foreach ($excluded_permissions as $permission) { if ($this->hasExactPermission($permission)) { + nlog("returning false as has excluded permission {$permission}"); return false; } } foreach($matched_permission as $permission) { if ($this->hasExactPermission($permission)) { + nlog("returning true as has matched permission {$permission}"); return true; } } } - public function documents() { return $this->morphMany(Document::class, 'documentable'); diff --git a/app/Providers/MailCssInlinerServiceProvider.php b/app/Providers/MailCssInlinerServiceProvider.php deleted file mode 100644 index e47be7180aee..000000000000 --- a/app/Providers/MailCssInlinerServiceProvider.php +++ /dev/null @@ -1,52 +0,0 @@ -publishes([ - __DIR__.'/../config/css-inliner.php' => base_path('config/css-inliner.php'), - ], 'config'); - } - - /** - * Register the service provider. - * - * @return void - */ - public function register() - { - // $this->app->singleton(CssInlinerPlugin::class, function ($app) { - // return new CssInlinerPlugin([]); - // }); - - // $this->app->singleton(CssInlinerPlugin::class, function ($app) { - // return new CssInlinerPlugin([]); - // }); - - // $this->app->bind(CssInlinerPlugin::class, function ($app) { - // return new CssInlinerPlugin([]); - // }); - } -} diff --git a/app/Utils/CssInlinerPlugin.php b/app/Utils/CssInlinerPlugin.php deleted file mode 100644 index bcd49b447e64..000000000000 --- a/app/Utils/CssInlinerPlugin.php +++ /dev/null @@ -1,140 +0,0 @@ -converter = new CssToInlineStyles(); - $this->options = $options; - } - - /** - * @param \Swift_Events_SendEvent $evt - */ - public function beforeSendPerformed(\Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - - if ($message->getContentType() === 'text/html' - || ($message->getContentType() === 'multipart/alternative' && $message->getBody()) - || ($message->getContentType() === 'multipart/mixed' && $message->getBody()) - ) { - [$body, $cssResources] = $this->messageSieve($message->getBody()); - $css = $this->concatCss($cssResources); - $message->setBody($this->converter->convert($body, $css)); - } - - foreach ($message->getChildren() as $part) { - if (strpos($part->getContentType(), 'text/html') === 0) { - [$body, $cssResources] = $this->messageSieve($part->getBody()); - $css = $this->concatCss($cssResources); - $part->setBody($this->converter->convert($body, $css)); - } - } - } - - /** - * Do nothing - * - * @param \Swift_Events_SendEvent $evt - */ - public function sendPerformed(\Swift_Events_SendEvent $evt) - { - // Do Nothing - } - - protected function concatCss(array $cssResources): string - { - $output = ''; - foreach ($cssResources as $cssResource) { - $output .= $this->fetchCss($cssResource); - } - - return $output; - } - - protected function fetchCss(string $filename): string - { - if (isset($this->cssCache[$filename])) { - return $this->cssCache[$filename]; - } - - $fixedFilename = $filename; - // Fix relative protocols on hrefs. Assume https. - if (substr($filename, 0, 2) === '//') { - $fixedFilename = 'https:'.$filename; - } - - $content = file_get_contents($fixedFilename); - if (! $content) { - return ''; - } - - $this->cssCache[$filename] = $content; - - return $content; - } - - protected function messageSieve(string $message): array - { - $cssResources = []; - - // Initialize with config defaults, if any - if (isset($this->options['css-files'])) { - $cssResources = $this->options['css-files']; - } - - $dom = new \DOMDocument(); - // set error level - $internalErrors = libxml_use_internal_errors(true); - - $dom->loadHTML($message); - - // Restore error level - libxml_use_internal_errors($internalErrors); - $link_tags = $dom->getElementsByTagName('link'); - - /** @var \DOMElement $link */ - foreach ($link_tags as $link) { - if ($link->getAttribute('rel') === 'stylesheet') { - array_push($cssResources, $link->getAttribute('href')); - } - } - - $link_tags = $dom->getElementsByTagName('link'); - for ($i = $link_tags->length; --$i >= 0;) { - $link = $link_tags->item($i); - if ($link->getAttribute('rel') === 'stylesheet') { - $link->parentNode->removeChild($link); - } - } - - if (count($cssResources)) { - return [$dom->saveHTML(), $cssResources]; - } - - return [$message, []]; - } -} diff --git a/composer.json b/composer.json index c2804a1c4105..f07e73bf659c 100644 --- a/composer.json +++ b/composer.json @@ -87,7 +87,6 @@ "symfony/http-client": "^6.0", "symfony/mailgun-mailer": "^6.1", "symfony/postmark-mailer": "^6.1", - "tijsverkoyen/css-to-inline-styles": "^2.2", "turbo124/beacon": "^1.3", "twilio/sdk": "^6.40", "webpatser/laravel-countries": "dev-master#75992ad", diff --git a/composer.lock b/composer.lock index a784b71becd7..1a002c2bc579 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "55a62c4290c3a07d0c38c8e4aeea61e0", + "content-hash": "6156afb5e414466a8cd7b5903bbcbc6a", "packages": [ { "name": "afosto/yaac", @@ -379,16 +379,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.258.10", + "version": "3.259.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "e164c9c5faf3965bd27ff2a4e9b7b3048ba8a337" + "reference": "096711644ebe5c956a97ef449fa2cb3b66443c25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e164c9c5faf3965bd27ff2a4e9b7b3048ba8a337", - "reference": "e164c9c5faf3965bd27ff2a4e9b7b3048ba8a337", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/096711644ebe5c956a97ef449fa2cb3b66443c25", + "reference": "096711644ebe5c956a97ef449fa2cb3b66443c25", "shasum": "" }, "require": { @@ -467,9 +467,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.258.10" + "source": "https://github.com/aws/aws-sdk-php/tree/3.259.0" }, - "time": "2023-02-14T19:21:16+00:00" + "time": "2023-02-17T19:21:38+00:00" }, { "name": "bacon/bacon-qr-code", @@ -1504,28 +1504,27 @@ }, { "name": "doctrine/lexer", - "version": "2.1.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { @@ -1562,7 +1561,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -1578,7 +1577,7 @@ "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", @@ -2168,16 +2167,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.287.0", + "version": "v0.288.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "ed58596d34272a5cd0dc2c0595d9a678b9834880" + "reference": "de6cfa1556faf4a23d9ab5844508bb576f44fdd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/ed58596d34272a5cd0dc2c0595d9a678b9834880", - "reference": "ed58596d34272a5cd0dc2c0595d9a678b9834880", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/de6cfa1556faf4a23d9ab5844508bb576f44fdd7", + "reference": "de6cfa1556faf4a23d9ab5844508bb576f44fdd7", "shasum": "" }, "require": { @@ -2206,9 +2205,9 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.287.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.288.0" }, - "time": "2023-02-12T01:08:11+00:00" + "time": "2023-02-18T01:16:11+00:00" }, { "name": "google/auth", @@ -4232,16 +4231,16 @@ }, { "name": "league/commonmark", - "version": "2.3.8", + "version": "2.3.9", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47" + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c493585c130544c4e91d2e0e131e6d35cb0cbc47", - "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", "shasum": "" }, "require": { @@ -4334,7 +4333,7 @@ "type": "tidelift" } ], - "time": "2022-12-10T16:02:17+00:00" + "time": "2023-02-15T14:07:24+00:00" }, { "name": "league/config", @@ -4504,16 +4503,16 @@ }, { "name": "league/flysystem", - "version": "3.12.2", + "version": "3.12.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f" + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f6377c709d2275ed6feaf63e44be7a7162b0e77f", - "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce", "shasum": "" }, "require": { @@ -4575,7 +4574,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.12.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.12.3" }, "funding": [ { @@ -4591,7 +4590,7 @@ "type": "tidelift" } ], - "time": "2023-01-19T12:02:19+00:00" + "time": "2023-02-18T15:32:41+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -4928,16 +4927,16 @@ }, { "name": "livewire/livewire", - "version": "v2.11.2", + "version": "v2.11.3", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "e92233f31dc1b88fb1ac242b32afe1ab7525ee05" + "reference": "5ab6266a12c637f645d38a2f0f61f84182f6249d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/e92233f31dc1b88fb1ac242b32afe1ab7525ee05", - "reference": "e92233f31dc1b88fb1ac242b32afe1ab7525ee05", + "url": "https://api.github.com/repos/livewire/livewire/zipball/5ab6266a12c637f645d38a2f0f61f84182f6249d", + "reference": "5ab6266a12c637f645d38a2f0f61f84182f6249d", "shasum": "" }, "require": { @@ -4989,7 +4988,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v2.11.2" + "source": "https://github.com/livewire/livewire/tree/v2.11.3" }, "funding": [ { @@ -4997,7 +4996,7 @@ "type": "github" } ], - "time": "2023-01-29T23:45:02+00:00" + "time": "2023-02-20T03:52:35+00:00" }, { "name": "microsoft/microsoft-graph", @@ -13071,25 +13070,25 @@ }, { "name": "beyondcode/laravel-query-detector", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/beyondcode/laravel-query-detector.git", - "reference": "8261d80c71c97e994c1021fe5c3bd2a1c27106fc" + "reference": "40c7e168fcf7eeb80d8e96f7922e05ab194269c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-query-detector/zipball/8261d80c71c97e994c1021fe5c3bd2a1c27106fc", - "reference": "8261d80c71c97e994c1021fe5c3bd2a1c27106fc", + "url": "https://api.github.com/repos/beyondcode/laravel-query-detector/zipball/40c7e168fcf7eeb80d8e96f7922e05ab194269c8", + "reference": "40c7e168fcf7eeb80d8e96f7922e05ab194269c8", "shasum": "" }, "require": { - "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0|^10.0", "php": "^7.1 || ^8.0" }, "require-dev": { "laravel/legacy-factories": "^1.0", - "orchestra/testbench": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "orchestra/testbench": "^3.0 || ^4.0 || ^5.0 || ^6.0|^8.0", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", @@ -13125,9 +13124,9 @@ ], "support": { "issues": "https://github.com/beyondcode/laravel-query-detector/issues", - "source": "https://github.com/beyondcode/laravel-query-detector/tree/1.6.0" + "source": "https://github.com/beyondcode/laravel-query-detector/tree/1.7.0" }, - "time": "2022-02-12T16:23:40+00:00" + "time": "2023-02-15T10:37:22+00:00" }, { "name": "brianium/paratest", @@ -13703,30 +13702,30 @@ }, { "name": "doctrine/annotations", - "version": "1.14.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "doctrine/lexer": "^1 || ^2", + "doctrine/lexer": "^2 || ^3", "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", + "php": "^7.2 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/cache": "^5.4 || ^6", "vimeo/psalm": "^4.10" }, "suggest": { @@ -13773,9 +13772,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" + "source": "https://github.com/doctrine/annotations/tree/2.0.1" }, - "time": "2023-02-01T09:20:38+00:00" + "time": "2023-02-02T22:02:53+00:00" }, { "name": "doctrine/instantiator", @@ -14082,27 +14081,27 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.14.2", + "version": "v3.14.4", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "14f0541651841b63640e7aafad041ad55dc7aa88" + "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/14f0541651841b63640e7aafad041ad55dc7aa88", - "reference": "14f0541651841b63640e7aafad041ad55dc7aa88", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1b3d9dba63d93b8a202c31e824748218781eae6b", + "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b", "shasum": "" }, "require": { "composer/semver": "^3.3", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.14.2 || ^2", - "doctrine/lexer": "^2", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", + "sebastian/diff": "^4.0 || ^5.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", @@ -14160,7 +14159,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.2" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.4" }, "funding": [ { @@ -14168,7 +14167,7 @@ "type": "github" } ], - "time": "2023-01-29T23:47:01+00:00" + "time": "2023-02-09T21:49:13+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -14223,24 +14222,24 @@ }, { "name": "laracasts/cypress", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/laracasts/cypress.git", - "reference": "9a9e5d25a51d2cbb410393e6a0d9883aa3304bf5" + "reference": "dd4e61188d4edaf65ffa18851a5df38d0fa0619a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laracasts/cypress/zipball/9a9e5d25a51d2cbb410393e6a0d9883aa3304bf5", - "reference": "9a9e5d25a51d2cbb410393e6a0d9883aa3304bf5", + "url": "https://api.github.com/repos/laracasts/cypress/zipball/dd4e61188d4edaf65ffa18851a5df38d0fa0619a", + "reference": "dd4e61188d4edaf65ffa18851a5df38d0fa0619a", "shasum": "" }, "require": { - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", "php": "^8.0" }, "require-dev": { - "orchestra/testbench": "^6.0|^7.0", + "orchestra/testbench": "^6.0|^7.0|^8.0", "phpunit/phpunit": "^8.0|^9.5.10", "spatie/laravel-ray": "^1.29" }, @@ -14276,9 +14275,9 @@ ], "support": { "issues": "https://github.com/laracasts/cypress/issues", - "source": "https://github.com/laracasts/cypress/tree/3.0.0" + "source": "https://github.com/laracasts/cypress/tree/3.0.1" }, - "time": "2022-06-27T13:49:35+00:00" + "time": "2023-02-16T20:00:16+00:00" }, { "name": "laravel/dusk", @@ -15086,16 +15085,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.9.17", + "version": "1.9.18", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2" + "reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/204e459e7822f2c586463029f5ecec31bb45a1f2", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f2d5cf71be91172a57c649770b73c20ebcffb0bf", + "reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf", "shasum": "" }, "require": { @@ -15125,7 +15124,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.9.17" + "source": "https://github.com/phpstan/phpstan/tree/1.9.18" }, "funding": [ { @@ -15141,7 +15140,7 @@ "type": "tidelift" } ], - "time": "2023-02-08T12:25:00+00:00" + "time": "2023-02-17T15:01:27+00:00" }, { "name": "phpunit/php-code-coverage", @@ -17310,30 +17309,28 @@ }, { "name": "zircote/swagger-php", - "version": "3.3.7", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "e8c3bb316e385e93a0c7e8b2aa0681079244c381" + "reference": "9d172471e56433b5c7061006b9a766f262a3edfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e8c3bb316e385e93a0c7e8b2aa0681079244c381", - "reference": "e8c3bb316e385e93a0c7e8b2aa0681079244c381", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/9d172471e56433b5c7061006b9a766f262a3edfd", + "reference": "9d172471e56433b5c7061006b9a766f262a3edfd", "shasum": "" }, "require": { - "doctrine/annotations": "^1.7", + "doctrine/annotations": "*", "ext-json": "*", "php": ">=7.2", - "psr/log": "^1.1 || ^2.0 || ^3.0", "symfony/finder": ">=2.2", "symfony/yaml": ">=3.3" }, "require-dev": { - "composer/package-versions-deprecated": "1.11.99.2", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", - "phpunit/phpunit": ">=8.5.14" + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit": ">=8" }, "bin": [ "bin/openapi" @@ -17377,9 +17374,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/3.3.7" + "source": "https://github.com/zircote/swagger-php/tree/3.1.0" }, - "time": "2023-01-03T21:17:10+00:00" + "time": "2020-09-03T20:18:43+00:00" } ], "aliases": [], diff --git a/config/app.php b/config/app.php index 87b04d3f4f45..225f88c32d82 100644 --- a/config/app.php +++ b/config/app.php @@ -201,7 +201,6 @@ return [ App\Providers\MultiDBProvider::class, App\Providers\ClientPortalServiceProvider::class, App\Providers\NinjaTranslationServiceProvider::class, - // App\Providers\MailCssInlinerServiceProvider::class, ], /* diff --git a/config/css-inliner.php b/config/css-inliner.php deleted file mode 100644 index b45f64c3c8e8..000000000000 --- a/config/css-inliner.php +++ /dev/null @@ -1,18 +0,0 @@ - [], - -]; diff --git a/tests/Unit/PermissionsTest.php b/tests/Unit/PermissionsTest.php index 3e2e1cf80df2..ae1b0f141874 100644 --- a/tests/Unit/PermissionsTest.php +++ b/tests/Unit/PermissionsTest.php @@ -82,6 +82,13 @@ class PermissionsTest extends TestCase $low_cu->save(); $this->assertTrue($this->user->hasExcludedPermissions(["view_client"])); + + $low_cu = CompanyUser::where(['company_id' => $this->company->id, 'user_id' => $this->user->id])->first(); + $low_cu->permissions = 'view_client'; + $low_cu->save(); + + $this->assertTrue($this->user->hasExcludedPermissions(["view_client"])); + } public function testHasExcludedPermissions2()