giorgigrdzelidze/laravel-shopify-sdk
Laravel Shopify SDK provides a clean integration for building Shopify apps and store integrations in Laravel. It helps manage Shopify API access, authentication, webhooks, and common resources so you can focus on app logic instead of boilerplate.
draft_orders.*, fulfillments.*, discounts.*, metafields.*, analytics.view). If your roadmap includes admin/staff/analyst/packer personas with different views of orders, fulfillments, discounts, or metafields, this release delivers the authorization layer as a feature rather than a custom project.*.create/*.edit/*.delete; a "fulfillment ops" seat gets fulfillments.* but not metafields.*), rather than through page hiding or separate builds.User model without hasShopifyPermission() gets full access. That makes this a zero-risk upgrade technically, but it also means "we upgraded" does not equal "we are gated." A PM should schedule the actual adoption step (implementing the contract, defining prefixes per role) as its own roadmap item with acceptance criteria.filament/filament as require-dev), with 106 passing tests / 226 assertions covering the no-user, no-grant, granted, and legacy-user cases plus a Filament-free unit matrix for cross-prefix leakage. That is the kind of coverage that justifies keeping the package in the critical path of your admin panel.Consider adoption when:
User model implements hasShopifyPermission().Look elsewhere, or plan supplemental work, when:
metafields.* when a resource is added) is captured in your own governance.Adoption checklist for the PM: confirm which User models implement hasShopifyPermission(); enumerate the intended role → prefix matrix and get it reviewed by security; delete the four now-redundant deny-all policies and the Analytics page workaround in the same change; add a test asserting a low-privilege user cannot reach each of the fifteen resources and the Analytics page.
For executives: This release removes the last gaps in who can see what inside the Shopify admin we ship. Before v2.1.0, four screens and the entire Analytics dashboard were visible to every logged-in user, which forced us to write and maintain custom restrictions. Now a merchant's roles can drive visibility across the whole admin from one tested mechanism. It is fully backward compatible — no migration, no downtime, no change for existing customers — and the package's test suite (106 tests) covers the access rules, which lowers our audit and security-review exposure. Net effect: less custom code to own, faster answers to customer security questions, and a clean foundation for permission-based plan tiers. The one action we owe is deciding and implementing our role matrix, so the gating is actually switched on for our users rather than running in legacy full-access mode.
For engineering: v2.1.0 closes the permission gap on DraftOrderResource, FulfillmentResource, DiscountResource, MetafieldResource (via HasShopifyPermissions with draft_orders.*, fulfillments.*, discounts.*, metafields.*) and the Analytics page (analytics.view through a canAccess() reusing the same logic). Everything routes through the existing checkPermission() path, so behavior is unchanged for apps that never adopted the contract — specifically, a User model without hasShopifyPermission() retains full access, and unauthenticated requests are denied. That gives us a genuinely safe upgrade: merge the dependency bump, then land our own change implementing hasShopifyPermission() on the user model and define the prefix-to-role mapping. In that same PR we should delete the deny-all policies on those four models and the Analytics page disable/re-register hack, since they become redundant and will otherwise mask real failures. Test coverage is solid and worth keeping: FilamentResourceGatingTest exercises the no-user, no-grant, granted, and legacy cases across all gated resources plus the page, and ShopifyPermissionsTest is a Filament-free matrix for per-action prefixing and cross-prefix leakage — extend that matrix whenever we add a resource or a custom capability. Note filament/filament is now require-dev, so CI must have it available.
How can I help you explore Laravel packages today?