<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ilya Beliaev</title>
    <description>The latest articles on Forem by Ilya Beliaev (@n3xt0r).</description>
    <link>https://forem.com/n3xt0r</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2594638%2F40604001-f388-4c30-879f-90d22ac3fdcd.jpeg</url>
      <title>Forem: Ilya Beliaev</title>
      <link>https://forem.com/n3xt0r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/n3xt0r"/>
    <language>en</language>
    <item>
      <title>Laravel has no native WebDAV server — so I built one</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Wed, 15 Apr 2026 21:19:08 +0000</pubDate>
      <link>https://forem.com/n3xt0r/laravel-has-no-native-webdav-server-so-i-built-one-2epk</link>
      <guid>https://forem.com/n3xt0r/laravel-has-no-native-webdav-server-so-i-built-one-2epk</guid>
      <description>&lt;p&gt;🚀 I’ve just released the first alpha version of my Laravel WebDAV server:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-webdav-server/releases/tag/1.0.0-alpha.1" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-webdav-server/releases/tag/1.0.0-alpha.1&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Disclaimer
&lt;/h2&gt;

&lt;p&gt;This is an early alpha prototype.&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;not stable
&lt;/li&gt;
&lt;li&gt;not production-ready
&lt;/li&gt;
&lt;li&gt;subject to breaking changes at any time
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current focus is on architecture and extensibility, not completeness.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;In the Laravel ecosystem, there is currently no truly native WebDAV server solution.&lt;/p&gt;

&lt;p&gt;Most existing approaches fall into one of two categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thin wrappers around SabreDAV with limited Laravel integration
&lt;/li&gt;
&lt;li&gt;WebDAV client adapters (e.g. for Storage::disk()), not actual servers
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What’s missing is a solution that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;integrates cleanly into Laravel’s architecture
&lt;/li&gt;
&lt;li&gt;respects existing auth and authorization concepts
&lt;/li&gt;
&lt;li&gt;works naturally with Laravel’s filesystem abstraction (Flysystem)
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;This package aims to bridge the gap between the WebDAV protocol and Laravel’s filesystem abstraction.&lt;/p&gt;

&lt;p&gt;Instead of exposing raw filesystem paths, it maps WebDAV nodes directly to Laravel disks.&lt;/p&gt;

&lt;p&gt;That means you can expose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local storage
&lt;/li&gt;
&lt;li&gt;S3 buckets
&lt;/li&gt;
&lt;li&gt;or any Flysystem-backed disk
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;through a WebDAV endpoint.&lt;/p&gt;




&lt;h2&gt;
  
  
  What makes this different
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Native Laravel integration
&lt;/h3&gt;

&lt;p&gt;This is not a standalone WebDAV server bolted onto Laravel.&lt;/p&gt;

&lt;p&gt;It is designed to feel like a first-class Laravel component.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Explicit request pipeline (no magic)
&lt;/h3&gt;

&lt;p&gt;Every request follows a clearly defined flow:&lt;/p&gt;

&lt;p&gt;Controller → Factory → Credential Validation → Space Resolution → Authorization → Storage&lt;/p&gt;

&lt;p&gt;There is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no hidden magic
&lt;/li&gt;
&lt;li&gt;no black box
&lt;/li&gt;
&lt;li&gt;no implicit behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every step is transparent and replaceable.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Clear separation of concerns
&lt;/h3&gt;

&lt;p&gt;The architecture strictly separates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebDAV transport (SabreDAV)&lt;/li&gt;
&lt;li&gt;Application logic (Laravel)&lt;/li&gt;
&lt;li&gt;Storage (Flysystem)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Pluggable architecture
&lt;/h3&gt;

&lt;p&gt;Core components are abstracted via interfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Credential validation
&lt;/li&gt;
&lt;li&gt;Storage space resolution
&lt;/li&gt;
&lt;li&gt;Path-level authorization
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All bindings use bindIf(), so you can override them without modifying package code.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Policy-native authorization
&lt;/h3&gt;

&lt;p&gt;Authorization integrates directly with Laravel’s Gate and Policies.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Dynamic storage mapping
&lt;/h3&gt;

&lt;p&gt;Storage is resolved at runtime based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user (principal)
&lt;/li&gt;
&lt;li&gt;route parameter {space}
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What this package is (and is not)
&lt;/h2&gt;

&lt;p&gt;✔ WebDAV server for Laravel (HTTP endpoint)&lt;br&gt;&lt;br&gt;
✖ Not a Storage::disk('webdav') client driver  &lt;/p&gt;




&lt;h2&gt;
  
  
  Current feature set
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;WebDAV server powered by SabreDAV
&lt;/li&gt;
&lt;li&gt;Mapping of WebDAV nodes to Laravel filesystem disks
&lt;/li&gt;
&lt;li&gt;Pluggable authentication (Basic Auth by default)
&lt;/li&gt;
&lt;li&gt;Flexible storage space resolution
&lt;/li&gt;
&lt;li&gt;Extensible authorization layer
&lt;/li&gt;
&lt;li&gt;Clean extension points via interfaces
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Supported operations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PROPFIND
&lt;/li&gt;
&lt;li&gt;GET
&lt;/li&gt;
&lt;li&gt;PUT
&lt;/li&gt;
&lt;li&gt;DELETE
&lt;/li&gt;
&lt;li&gt;MKCOL
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What’s missing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Stability
&lt;/li&gt;
&lt;li&gt;Edge case handling
&lt;/li&gt;
&lt;li&gt;Production readiness
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why release this early?
&lt;/h2&gt;

&lt;p&gt;Because the architecture is the most important part.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;I’d really appreciate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architectural feedback
&lt;/li&gt;
&lt;li&gt;edge cases I haven’t considered
&lt;/li&gt;
&lt;li&gt;ideas for real-world use
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-webdav-server/releases/tag/1.0.0-alpha.1" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-webdav-server/releases/tag/1.0.0-alpha.1&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Hashtags
&lt;/h2&gt;

&lt;h1&gt;
  
  
  laravel #php #webdav #opensource #softwarearchitecture #backend #api #flysystem
&lt;/h1&gt;

</description>
      <category>laravel</category>
      <category>opensource</category>
      <category>php</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Laravel Passport Modern Scopes – Attribute-Based OAuth Scope Enforcement</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Wed, 07 Jan 2026 23:49:17 +0000</pubDate>
      <link>https://forem.com/n3xt0r/laravel-passport-modern-scopes-attribute-based-oauth-scope-enforcement-1a98</link>
      <guid>https://forem.com/n3xt0r/laravel-passport-modern-scopes-attribute-based-oauth-scope-enforcement-1a98</guid>
      <description>&lt;p&gt;Laravel Passport traditionally enforces OAuth scopes at the &lt;strong&gt;routing level&lt;/strong&gt;, usually via middleware definitions in&lt;br&gt;
route files.&lt;/p&gt;

&lt;p&gt;While this works, it often leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authorization rules scattered across routes&lt;/li&gt;
&lt;li&gt;controllers coupled to infrastructure concerns&lt;/li&gt;
&lt;li&gt;duplicated or hard-to-review scope requirements&lt;/li&gt;
&lt;li&gt;reduced clarity as APIs grow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Laravel Passport Modern Scopes&lt;/strong&gt; introduces a different approach.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-passport-modern-scopes" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-passport-modern-scopes&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The idea: declare scopes where they matter
&lt;/h2&gt;

&lt;p&gt;Instead of wiring scopes into routes, this package allows you to &lt;strong&gt;declare OAuth scope requirements directly on&lt;br&gt;
controllers or controller actions&lt;/strong&gt; using &lt;strong&gt;PHP 8 attributes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Authorization intent lives next to the code it protects.&lt;/p&gt;

&lt;p&gt;Passport itself remains fully responsible for authentication and token validation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;N3XT0R\PassportModernScopes\Support\Attributes\RequiresScope&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;N3XT0R\PassportModernScopes\Support\Attributes\RequiresAnyScope&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="na"&gt;#[RequiresScope('users:read')]&lt;/span&gt;
&lt;span class="k"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Requires users:read&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="na"&gt;#[RequiresAnyScope('users:update', 'users:write')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Requires at least one of the given scopes&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single middleware inspects controller attributes at runtime and enforces them using Laravel Passport’s native&lt;br&gt;
&lt;code&gt;tokenCan&lt;/code&gt; checks.&lt;/p&gt;

&lt;p&gt;Authentication itself remains the responsibility of your configured guard (e.g. &lt;code&gt;auth:api&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  What this package does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enables &lt;strong&gt;attribute-based OAuth scope enforcement&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Keeps routes clean and infrastructure-agnostic&lt;/li&gt;
&lt;li&gt;Makes authorization requirements explicit and discoverable&lt;/li&gt;
&lt;li&gt;Works with Passport’s existing scope validation&lt;/li&gt;
&lt;li&gt;Requires no changes to Passport internals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scopes are &lt;strong&gt;declared, not wired&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why attributes?
&lt;/h2&gt;

&lt;p&gt;Using PHP attributes for authorization requirements has several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declarative and explicit&lt;/li&gt;
&lt;li&gt;No duplication between routes and controllers&lt;/li&gt;
&lt;li&gt;Easier to reason about during code review&lt;/li&gt;
&lt;li&gt;Friendly to static analysis and documentation tools&lt;/li&gt;
&lt;li&gt;No magic strings scattered across route definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps &lt;strong&gt;authorization intent&lt;/strong&gt; separate from &lt;strong&gt;HTTP wiring&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this package does &lt;em&gt;not&lt;/em&gt; do
&lt;/h2&gt;

&lt;p&gt;To be explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ It does not replace Laravel Passport&lt;/li&gt;
&lt;li&gt;❌ It does not implement authentication&lt;/li&gt;
&lt;li&gt;❌ It does not introduce custom guards&lt;/li&gt;
&lt;li&gt;❌ It does not enforce business rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It only resolves and enforces &lt;strong&gt;declared OAuth scope requirements&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where this fits architecturally
&lt;/h2&gt;

&lt;p&gt;Laravel Passport Modern Scopes is intentionally small and focused.&lt;/p&gt;

&lt;p&gt;It pairs well with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;structured scope models (e.g. &lt;code&gt;resource:action&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;domain-level authorization logic&lt;/li&gt;
&lt;li&gt;admin tooling that manages scopes centrally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can be used standalone or alongside higher-level authorization libraries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require n3xt0r/laravel-passport-modern-scopes:^2.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The middleware is automatically registered via the package’s service provider.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;This package is about &lt;strong&gt;clarity&lt;/strong&gt;, not abstraction.&lt;/p&gt;

&lt;p&gt;If you prefer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explicit authorization requirements&lt;/li&gt;
&lt;li&gt;clean routes&lt;/li&gt;
&lt;li&gt;controllers that express intent clearly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then attribute-based scope enforcement can be a very natural fit.&lt;/p&gt;

&lt;p&gt;Feedback and discussion are welcome.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-passport-modern-scopes" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-passport-modern-scopes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>passport</category>
      <category>oauth2</category>
      <category>attributes</category>
    </item>
    <item>
      <title>Filament Passport UI – Managing Laravel Passport OAuth with Clarity</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Wed, 07 Jan 2026 23:47:11 +0000</pubDate>
      <link>https://forem.com/n3xt0r/filament-passport-ui-managing-laravel-passport-oauth-with-clarity-3hma</link>
      <guid>https://forem.com/n3xt0r/filament-passport-ui-managing-laravel-passport-oauth-with-clarity-3hma</guid>
      <description>&lt;p&gt;Laravel Passport provides a solid, standards-compliant OAuth2 implementation.&lt;br&gt;&lt;br&gt;
What it intentionally does &lt;em&gt;not&lt;/em&gt; provide is an opinionated way to &lt;strong&gt;administer and govern OAuth configuration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In real-world applications, this often leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth clients created once via CLI and never revisited&lt;/li&gt;
&lt;li&gt;unclear ownership of machine-to-machine clients&lt;/li&gt;
&lt;li&gt;scopes defined as ad-hoc strings without structure&lt;/li&gt;
&lt;li&gt;no central overview of active tokens and permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Filament Passport UI&lt;/strong&gt; was created to close this gap.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/filament-passport-ui" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/filament-passport-ui&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Filament Passport UI is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Filament Passport UI&lt;/strong&gt; is a &lt;strong&gt;structured administrative interface&lt;/strong&gt; for managing Laravel Passport OAuth resources&lt;br&gt;
using &lt;strong&gt;Filament v4&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is designed for applications that already use Filament as their primary admin panel and want to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth clients&lt;/li&gt;
&lt;li&gt;tokens&lt;/li&gt;
&lt;li&gt;scopes&lt;/li&gt;
&lt;li&gt;grants and authorization-related state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;in a &lt;strong&gt;clear, explicit, and reviewable way&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This package focuses on &lt;strong&gt;administration and visibility&lt;/strong&gt;, not on implementing OAuth flows.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the package does
&lt;/h2&gt;

&lt;p&gt;Filament Passport UI adds a &lt;strong&gt;domain-oriented admin layer&lt;/strong&gt; on top of Laravel Passport:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth clients are managed explicitly instead of being created only via CLI&lt;/li&gt;
&lt;li&gt;Scopes are modeled and managed in a structured way&lt;/li&gt;
&lt;li&gt;Tokens and grants become visible and reviewable&lt;/li&gt;
&lt;li&gt;Authorization decisions remain enforced by Passport at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passport itself is &lt;strong&gt;not modified or extended&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
All logic operates at the &lt;strong&gt;application and UI level&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OAuth client management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Manage OAuth clients by grant type:

&lt;ul&gt;
&lt;li&gt;authorization code&lt;/li&gt;
&lt;li&gt;client credentials&lt;/li&gt;
&lt;li&gt;password&lt;/li&gt;
&lt;li&gt;personal access&lt;/li&gt;
&lt;li&gt;implicit&lt;/li&gt;
&lt;li&gt;device&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;View client metadata and ownership&lt;/li&gt;

&lt;li&gt;Enable or revoke clients via UI&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Token visibility
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Inspect issued access tokens&lt;/li&gt;
&lt;li&gt;Review token state and expiration&lt;/li&gt;
&lt;li&gt;Revoke tokens explicitly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Structured scopes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Manage scopes via UI instead of static configuration&lt;/li&gt;
&lt;li&gt;Model scopes as &lt;code&gt;resource:action&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Group and reason about permissions in a human-readable way&lt;/li&gt;
&lt;li&gt;Designed to work with structured authorization models&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Native Filament integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built with &lt;strong&gt;Filament v4 resources and pages&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;UX aligned with Filament conventions&lt;/li&gt;
&lt;li&gt;No custom panels or hacks required&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Auditability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Administrative actions are fully auditable&lt;/li&gt;
&lt;li&gt;Changes can be recorded via &lt;code&gt;spatie/laravel-activitylog&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Supports traceability for security and compliance contexts (e.g. ISO/IEC 27001)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What this package does &lt;em&gt;not&lt;/em&gt; do
&lt;/h2&gt;

&lt;p&gt;To be explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ It does not implement OAuth flows&lt;/li&gt;
&lt;li&gt;❌ It does not replace Laravel Passport&lt;/li&gt;
&lt;li&gt;❌ It does not enforce authorization decisions&lt;/li&gt;
&lt;li&gt;❌ It does not guess application security rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Authorization logic remains the responsibility of the application.&lt;/p&gt;




&lt;h2&gt;
  
  
  Relationship to Laravel Passport Authorization Core
&lt;/h2&gt;

&lt;p&gt;Filament Passport UI builds on a clear architectural separation.&lt;/p&gt;

&lt;p&gt;All &lt;strong&gt;Filament-agnostic authorization and domain logic&lt;/strong&gt; is progressively consolidated into a dedicated core package:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-passport-authorization-core" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-passport-authorization-core&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clean separation between domain logic and UI&lt;/li&gt;
&lt;li&gt;reuse of authorization concepts outside of Filament&lt;/li&gt;
&lt;li&gt;independent evolution of core logic and admin UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Filament Passport UI remains focused purely on &lt;strong&gt;administrative workflows and presentation&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This package is useful if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use Laravel Passport and Filament&lt;/li&gt;
&lt;li&gt;manage multiple OAuth clients or integrations&lt;/li&gt;
&lt;li&gt;want visibility into tokens and permissions&lt;/li&gt;
&lt;li&gt;care about long-term maintainability and auditability&lt;/li&gt;
&lt;li&gt;prefer explicit administration over CLI-only workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Filament Passport UI is not about adding features to Passport.&lt;/p&gt;

&lt;p&gt;It’s about making &lt;strong&gt;OAuth configuration visible, explicit, and manageable&lt;/strong&gt; in real-world systems.&lt;/p&gt;

&lt;p&gt;Feedback, issues, and architectural discussion are very welcome.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/filament-passport-ui" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/filament-passport-ui&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>filament</category>
      <category>authorization</category>
      <category>passport</category>
    </item>
    <item>
      <title>Laravel Passport Authorization Core – A Domain-Oriented Authorization Foundation</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Wed, 07 Jan 2026 23:45:45 +0000</pubDate>
      <link>https://forem.com/n3xt0r/laravel-passport-authorization-core-a-domain-oriented-authorization-foundation-57ah</link>
      <guid>https://forem.com/n3xt0r/laravel-passport-authorization-core-a-domain-oriented-authorization-foundation-57ah</guid>
      <description>&lt;p&gt;n many Laravel applications, OAuth is handled correctly, but &lt;strong&gt;authorization modeling slowly degrades over time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Scopes become undocumented strings.&lt;br&gt;&lt;br&gt;
Authorization rules spread across policies, middleware, and UI layers.&lt;br&gt;&lt;br&gt;
Admin panels re-implement domain logic that should not live there.&lt;/p&gt;

&lt;p&gt;To address this, I extracted the authorization domain logic from a real-world Filament + Passport setup into a dedicated&lt;br&gt;
core package:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-passport-authorization-core" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-passport-authorization-core&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What this package is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Laravel Passport Authorization Core&lt;/strong&gt; is a &lt;strong&gt;UI-agnostic, domain-oriented authorization layer&lt;/strong&gt; built on top of&lt;br&gt;
Laravel Passport.&lt;/p&gt;

&lt;p&gt;It focuses on &lt;strong&gt;authorization intent&lt;/strong&gt;, not OAuth mechanics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No UI&lt;/li&gt;
&lt;li&gt;No OAuth flows&lt;/li&gt;
&lt;li&gt;No token issuance&lt;/li&gt;
&lt;li&gt;No policy enforcement magic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passport remains fully responsible for runtime authentication and token validation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The core idea
&lt;/h2&gt;

&lt;p&gt;Instead of treating scopes as arbitrary strings, this package introduces &lt;strong&gt;explicit authorization concepts&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured scopes&lt;/strong&gt; (&lt;code&gt;resource:action&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorization context&lt;/strong&gt; (client, grant, actor, scope, intent)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application-level use cases&lt;/strong&gt; as the only integration surface&lt;/li&gt;
&lt;li&gt;Clear separation of:

&lt;ul&gt;
&lt;li&gt;Domain&lt;/li&gt;
&lt;li&gt;Application (Usecases)&lt;/li&gt;
&lt;li&gt;Infrastructure (Passport integration)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;All interaction happens through &lt;strong&gt;Application / Usecase classes&lt;/strong&gt; — never through low-level models or repositories.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Laravel Passport intentionally avoids opinions about authorization modeling.&lt;/p&gt;

&lt;p&gt;In larger systems, this often leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicated authorization logic&lt;/li&gt;
&lt;li&gt;unclear ownership of permissions&lt;/li&gt;
&lt;li&gt;UI-driven security decisions&lt;/li&gt;
&lt;li&gt;poor auditability and reviewability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This package provides a &lt;strong&gt;single, explicit authorization backbone&lt;/strong&gt; that can be reused by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;admin interfaces (e.g. Filament)&lt;/li&gt;
&lt;li&gt;policies and middleware&lt;/li&gt;
&lt;li&gt;API gateways&lt;/li&gt;
&lt;li&gt;background jobs&lt;/li&gt;
&lt;li&gt;audit and compliance tooling&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What this package does &lt;em&gt;not&lt;/em&gt; do
&lt;/h2&gt;

&lt;p&gt;To be explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ It does not replace Passport&lt;/li&gt;
&lt;li&gt;❌ It does not implement OAuth flows&lt;/li&gt;
&lt;li&gt;❌ It does not enforce authorization decisions&lt;/li&gt;
&lt;li&gt;❌ It does not assume application architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It defines &lt;strong&gt;structure and intent&lt;/strong&gt; — enforcement remains the responsibility of the application.&lt;/p&gt;




&lt;h2&gt;
  
  
  Relationship to Filament Passport UI
&lt;/h2&gt;

&lt;p&gt;This package serves as the &lt;strong&gt;domain core&lt;/strong&gt; for&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Filament Passport UI&lt;/strong&gt;, which focuses purely on administrative UI concerns.&lt;/p&gt;

&lt;p&gt;The long-term architecture deliberately separates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authorization domain logic&lt;/strong&gt; → Core package
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Presentation &amp;amp; admin workflows&lt;/strong&gt; → UI package&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both packages evolve independently with a stable boundary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This package is intended for developers who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;care about long-term authorization clarity&lt;/li&gt;
&lt;li&gt;work on multi-service or multi-team systems&lt;/li&gt;
&lt;li&gt;want audit-friendly security models&lt;/li&gt;
&lt;li&gt;prefer explicit architecture over implicit conventions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;This is not a “plug-and-play helper package”.&lt;/p&gt;

&lt;p&gt;It’s a &lt;strong&gt;foundational library&lt;/strong&gt; meant to support clean architecture and long-lived systems.&lt;/p&gt;

&lt;p&gt;Feedback, architectural discussion, and constructive criticism are very welcome.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-passport-authorization-core" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-passport-authorization-core&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>oauth2</category>
      <category>authorization</category>
      <category>cleanarchitecture</category>
    </item>
    <item>
      <title>🚀 WP-XPub v1.0.0 – A Clean Architecture Approach to Multi-Channel Publishing in WordPress</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Mon, 28 Jul 2025 21:47:14 +0000</pubDate>
      <link>https://forem.com/n3xt0r/wp-xpub-v100-a-clean-architecture-approach-to-multi-channel-publishing-in-wordpress-8fc</link>
      <guid>https://forem.com/n3xt0r/wp-xpub-v100-a-clean-architecture-approach-to-multi-channel-publishing-in-wordpress-8fc</guid>
      <description>&lt;p&gt;We’re proud to release &lt;strong&gt;WP-XPub v1.0.0&lt;/strong&gt;, a modern, maintainable WordPress plugin designed for structured multi-channel publishing — built from the ground up with &lt;strong&gt;hexagonal architecture&lt;/strong&gt;, &lt;strong&gt;PSR standards&lt;/strong&gt;, and &lt;strong&gt;clean separation of concerns&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 What is WP-XPub?
&lt;/h2&gt;

&lt;p&gt;WP-XPub is a flexible auto-publisher framework for WordPress that allows you to push content to multiple external platforms (e.g., Mastodon, LinkedIn, custom APIs) from within your WordPress environment. It’s &lt;strong&gt;not another social media plugin&lt;/strong&gt; — it’s a system designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High modularity
&lt;/li&gt;
&lt;li&gt;Testability and long-term maintainability
&lt;/li&gt;
&lt;li&gt;Minimal WordPress coupling
&lt;/li&gt;
&lt;li&gt;Extensible publisher definitions
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Why Not in the WordPress Plugin Directory?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ WP-XPub is &lt;em&gt;not&lt;/em&gt; listed on WordPress.org — and that’s &lt;strong&gt;by design&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The WordPress plugin directory enforces legacy practices that actively hinder modern software architecture. This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tight coupling through &lt;code&gt;functions.php&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Global procedural design
&lt;/li&gt;
&lt;li&gt;Prohibition of namespaced class autoloading (e.g., via Composer)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Literal-only i18n strings&lt;/strong&gt;, which break abstraction and prevent layered translation systems
&lt;/li&gt;
&lt;li&gt;Constraints that prevent effective testing or mocking
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We respect the ecosystem — but we choose to build for developers who care about &lt;strong&gt;code quality&lt;/strong&gt;, &lt;strong&gt;clarity&lt;/strong&gt;, and &lt;strong&gt;architecture first&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ What's in v1.0.0?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✔️ &lt;strong&gt;Multi-publisher architecture&lt;/strong&gt; using filter-dispatched factories
&lt;/li&gt;
&lt;li&gt;✔️ Admin UI to activate publishers and set platform-specific configuration
&lt;/li&gt;
&lt;li&gt;✔️ Publisher abstraction that allows easy integration of 3rd-party APIs
&lt;/li&gt;
&lt;li&gt;✔️ Automatic trigger on post publication (&lt;code&gt;post_status = publish&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;✔️ Fully PSR-compliant code (PSR-1, PSR-4, PSR-12)
&lt;/li&gt;
&lt;li&gt;✔️ Composer-powered structure — no function clutter, no legacy globals
&lt;/li&gt;
&lt;li&gt;✔️ Support for modern PHP (8.2+) and WordPress 6.x
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;👉 See the full source and installation instructions on &lt;a href="https://github.com/N3XT0R/WP-XPub" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>php</category>
      <category>psr</category>
      <category>cleanarchitecture</category>
    </item>
    <item>
      <title>Laravel Migration Generator: v8.1 &amp; v8.2 Released 🚀</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Wed, 09 Jul 2025 07:05:05 +0000</pubDate>
      <link>https://forem.com/n3xt0r/laravel-migration-generator-v81-v82-released-4g95</link>
      <guid>https://forem.com/n3xt0r/laravel-migration-generator-v81-v82-released-4g95</guid>
      <description>&lt;p&gt;I've recently shipped two updates to my &lt;a href="https://github.com/N3XT0R/laravel-migration-generator" rel="noopener noreferrer"&gt;Laravel Migration Generator&lt;/a&gt; project – focusing on database normalization, architecture cleanup, and future extensibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔄 v8.1.0 – Schema Normalization
&lt;/h2&gt;

&lt;p&gt;You can now normalize legacy schemas using the new &lt;code&gt;--normalizer=pivot&lt;/code&gt; option:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replaces composite primary keys with a synthetic &lt;code&gt;$table-&amp;gt;id()&lt;/code&gt; column&lt;/li&gt;
&lt;li&gt;Preserves the original compound key as a &lt;code&gt;UNIQUE&lt;/code&gt; constraint&lt;/li&gt;
&lt;li&gt;Improves compatibility with &lt;strong&gt;Eloquent&lt;/strong&gt; models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ideal if you're working with databases that were not designed for Laravel-style ORM!&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 v8.2.0 – Refactored Execution Flow
&lt;/h2&gt;

&lt;p&gt;This release introduces the &lt;code&gt;SchemaMigrationExecutor&lt;/code&gt; and its interface to &lt;strong&gt;decouple execution logic&lt;/strong&gt; from the console command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements the &lt;strong&gt;Separation of Concerns&lt;/strong&gt; principle (SoC)&lt;/li&gt;
&lt;li&gt;Executor is now resolved via Laravel's service container&lt;/li&gt;
&lt;li&gt;Optionally injects the &lt;code&gt;SchemaNormalizationManagerInterface&lt;/code&gt; only when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cleaner, more testable, and easier to extend.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔭 Up Next
&lt;/h2&gt;

&lt;p&gt;I'm currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt; – to improve performance for repeated runs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Generation&lt;/strong&gt; – automatic Eloquent model scaffolding based on the schema&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Try it out!
&lt;/h2&gt;

&lt;p&gt;👉 GitHub: &lt;a href="https://github.com/N3XT0R/laravel-migration-generator" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-migration-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're migrating legacy databases or want to generate clean Laravel-compatible migrations – this tool might save you hours.&lt;/p&gt;




&lt;p&gt;Thanks for reading – feel free to drop feedback or ideas for upcoming versions!&lt;/p&gt;

&lt;h1&gt;
  
  
  laravel #php #opensource #cli #migrations #eloquent #legacycode #cleanarchitecture #devlog
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>🚀 Laravel Migration Generator – Now with PostgreSQL and MSSQL Support</title>
      <dc:creator>Ilya Beliaev</dc:creator>
      <pubDate>Fri, 20 Jun 2025 20:57:48 +0000</pubDate>
      <link>https://forem.com/n3xt0r/laravel-migration-generator-now-with-postgresql-and-mssql-support-2m24</link>
      <guid>https://forem.com/n3xt0r/laravel-migration-generator-now-with-postgresql-and-mssql-support-2m24</guid>
      <description>&lt;h1&gt;
  
  
  Laravel Migration Generator – now with PostgreSQL &amp;amp; MSSQL support!
&lt;/h1&gt;

&lt;p&gt;🚀 &lt;strong&gt;Introducing Laravel Migration Generator&lt;/strong&gt; – an open-source package that lets you &lt;strong&gt;generate Laravel migrations directly from your existing database schema&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No more manual migration writing. It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ MySQL (5.7 &amp;amp; 8.0)&lt;/li&gt;
&lt;li&gt;✅ PostgreSQL (15)&lt;/li&gt;
&lt;li&gt;✅ MSSQL (2022)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tested with Laravel 10–12 and PHP 8.2–8.4.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require &lt;span class="nt"&gt;--dev&lt;/span&gt; n3xt0r/laravel-migration-generator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔍 Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generate migrations from your database schema&lt;/li&gt;
&lt;li&gt;Multiple output modes (by table, by database, grouped)&lt;/li&gt;
&lt;li&gt;Supports complex structures (foreign keys, indexes)&lt;/li&gt;
&lt;li&gt;CLI-powered and Docker-compatible&lt;/li&gt;
&lt;li&gt;Open for extension (planned plugin support)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📘 Documentation
&lt;/h2&gt;

&lt;p&gt;Full documentation is available at:&lt;/p&gt;

&lt;p&gt;📚 &lt;a href="https://laravel-migration-generator.readthedocs.io/" rel="noopener noreferrer"&gt;https://laravel-migration-generator.readthedocs.io/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 GitHub
&lt;/h2&gt;

&lt;p&gt;Check out the repository on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/N3XT0R/laravel-migration-generator" rel="noopener noreferrer"&gt;https://github.com/N3XT0R/laravel-migration-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find it helpful, leave a ⭐️ – it's highly appreciated!&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Contribute
&lt;/h2&gt;

&lt;p&gt;Have feedback or want to contribute? Open an issue or PR on GitHub. Plugin system, model generator and more features are planned – stay tuned!&lt;/p&gt;

&lt;p&gt;Thanks for reading &amp;amp; happy migrating!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>postgres</category>
      <category>mysql</category>
    </item>
  </channel>
</rss>
