{"id":36523,"date":"2025-12-19T09:30:49","date_gmt":"2025-12-19T06:30:49","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/"},"modified":"2025-12-19T09:30:49","modified_gmt":"2025-12-19T06:30:49","slug":"laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/","title":{"rendered":"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak"},"content":{"rendered":"<h2>Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131nda kullan\u0131c\u0131 deneyimi kadar g\u00fcvenlik de b\u00fcy\u00fck \u00f6nem ta\u015f\u0131maktad\u0131r. \u00d6zellikle farkl\u0131 yetkilere sahip kullan\u0131c\u0131 gruplar\u0131n\u0131n oldu\u011fu uygulamalarda, kimin hangi kayna\u011fa eri\u015febilece\u011fini, hangi i\u015flemi yapabilece\u011fini belirlemek kritik bir ihtiya\u00e7t\u0131r. \u0130\u015fte bu noktada Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc (RBAC) devreye girer. Bu makalede, modern web geli\u015ftirmenin iki g\u00fc\u00e7l\u00fc arac\u0131 olan Laravel ve Next.js kullanarak kapsaml\u0131 bir RBAC sistemini nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, y\u00f6netece\u011finizi ve ustala\u015faca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. G\u00fcvenli, \u00f6l\u00e7eklenebilir ve kullan\u0131c\u0131 dostu uygulamalar in\u015fa etmek i\u00e7in bu k\u0131lavuz size yol g\u00f6sterecek.<\/p>\n<h2>1. Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc (RBAC) Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc (RBAC), bir sistemdeki kaynaklara eri\u015fimi, kullan\u0131c\u0131n\u0131n belirli bir rol veya role atanm\u0131\u015f yetkiler arac\u0131l\u0131\u011f\u0131yla d\u00fczenleyen bir g\u00fcvenlik mekanizmas\u0131d\u0131r. Bu model, kullan\u0131c\u0131lar\u0131 do\u011frudan yetkilendirmek yerine, onlar\u0131 rollerle ili\u015fkilendirerek y\u00f6netim karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve g\u00fcvenli\u011fi art\u0131r\u0131r.<\/p>\n<h3>1.1. RBAC Temelleri: Kullan\u0131c\u0131lar, Roller ve \u0130zinler<\/h3>\n<p>RBAC modeli \u00fc\u00e7 temel bile\u015fen \u00fczerine kuruludur:<\/p>\n<p>*   <strong>Kullan\u0131c\u0131lar (Users):<\/strong> Sisteme giri\u015f yapan ve belirli i\u015flemleri ger\u00e7ekle\u015ftirmek isteyen bireylerdir.<br \/>\n*   <strong>Roller (Roles):<\/strong> Benzer yetkilere sahip kullan\u0131c\u0131 gruplar\u0131n\u0131 temsil eden mant\u0131ksal yap\u0131lard\u0131r. \u00d6rne\u011fin, &#8220;Y\u00f6netici&#8221;, &#8220;Edit\u00f6r&#8221;, &#8220;\u00dcye&#8221; gibi roller olabilir. Bir kullan\u0131c\u0131 birden fazla role sahip olabilir.<br \/>\n*   <strong>\u0130zinler (Permissions):<\/strong> Bir kullan\u0131c\u0131n\u0131n (rol\u00fc arac\u0131l\u0131\u011f\u0131yla) belirli bir kayna\u011fa eri\u015fme veya belirli bir i\u015flemi ger\u00e7ekle\u015ftirme yetkisini tan\u0131mlar. \u00d6rne\u011fin, &#8220;makale_olu\u015ftur&#8221;, &#8220;kullan\u0131c\u0131_sil&#8221;, &#8220;ayarlar\u0131_g\u00f6r\u00fcnt\u00fcle&#8221; gibi izinler olabilir.<\/p>\n<p>Bu yap\u0131 sayesinde, bir kullan\u0131c\u0131n\u0131n yetkileri de\u011fi\u015fti\u011finde, do\u011frudan kullan\u0131c\u0131ya atanan izinleri g\u00fcncellemek yerine, sadece rol\u00fcn\u00fc de\u011fi\u015ftirmek veya rol\u00fcn izinlerini g\u00fcncellemek yeterli olur. Bu, \u00f6zellikle b\u00fcy\u00fck sistemlerde y\u00f6netim y\u00fck\u00fcn\u00fc azalt\u0131r.<\/p>\n<h3>1.2. RBAC&#8217;nin Avantajlar\u0131 ve Dezavantajlar\u0131<\/h3>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<p>*   <strong>Y\u00f6netim Kolayl\u0131\u011f\u0131:<\/strong> Kullan\u0131c\u0131 baz\u0131nda de\u011fil, rol baz\u0131nda yetki y\u00f6netimi, \u00f6zellikle \u00e7ok say\u0131da kullan\u0131c\u0131 ve izin oldu\u011funda b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Yeni kullan\u0131c\u0131lar eklendi\u011finde veya yetkiler de\u011fi\u015fti\u011finde, mevcut rolleri kullanarak sistemi kolayca geni\u015fletebilirsiniz.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Kullan\u0131c\u0131lar\u0131n sadece ihtiya\u00e7 duyduklar\u0131 yetkilere sahip olmas\u0131n\u0131 sa\u011flayarak &#8220;en az ayr\u0131cal\u0131k&#8221; ilkesini destekler. Bu, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n potansiyel etkisini azalt\u0131r.<br \/>\n*   <strong>\u015eeffafl\u0131k:<\/strong> Kimin neye eri\u015febilece\u011fi, roller arac\u0131l\u0131\u011f\u0131yla daha net bir \u015fekilde g\u00f6r\u00fclebilir.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<p>*   <strong>\u0130lk Kurulum Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> Ba\u015flang\u0131\u00e7ta rollerin ve izinlerin do\u011fru \u015fekilde tasarlanmas\u0131 zaman alabilir.<br \/>\n*   <strong>\u00c7ok Detayl\u0131 Kontrolde Zorluk:<\/strong> \u00c7ok ince taneli (fine-grained) eri\u015fim kontrol\u00fc gerekti\u011finde (\u00f6rne\u011fin, &#8220;sadece kendi olu\u015fturdu\u011fu makaleyi d\u00fczenleyebilir&#8221;), RBAC tek ba\u015f\u0131na yetersiz kalabilir ve Nitelik Tabanl\u0131 Eri\u015fim Kontrol\u00fc (ABAC) gibi modellerle birle\u015ftirilmesi gerekebilir.<\/p>\n<h3>1.3. Di\u011fer Eri\u015fim Kontrol Modelleriyle Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>*   <strong>Discretionary Access Control (DAC):<\/strong> Kaynak sahibinin, kaynaklar\u0131na kimin eri\u015febilece\u011fine karar verdi\u011fi modeldir. Basit sistemler i\u00e7in uygun olsa da, b\u00fcy\u00fck ve karma\u015f\u0131k sistemlerde y\u00f6netimi zordur.<br \/>\n*   <strong>Mandatory Access Control (MAC):<\/strong> Sistem y\u00f6neticisinin merkezi olarak t\u00fcm eri\u015fim politikalar\u0131n\u0131 belirledi\u011fi modeldir. Y\u00fcksek g\u00fcvenlik gerektiren askeri veya devlet sistemlerinde kullan\u0131l\u0131r. Kullan\u0131c\u0131lar\u0131n kendi eri\u015fim haklar\u0131n\u0131 de\u011fi\u015ftirmesine izin vermez.<br \/>\n*   <strong>Attribute-Based Access Control (ABAC):<\/strong> Kullan\u0131c\u0131, kaynak, ortam ve eylem niteliklerine (attribute) dayal\u0131 dinamik eri\u015fim kararlar\u0131 veren en esnek modeldir. &#8220;Kullan\u0131c\u0131, mesai saatleri i\u00e7inde ve belirli bir IP adresinden ba\u011flan\u0131yorsa, \u015fu belgeye eri\u015febilir&#8221; gibi senaryolar\u0131 y\u00f6netebilir. RBAC&#8217;ye g\u00f6re daha karma\u015f\u0131kt\u0131r ancak daha esnektir. RBAC genellikle ABAC&#8217;nin bir alt k\u00fcmesi veya ba\u015flang\u0131\u00e7 noktas\u0131 olarak g\u00f6r\u00fclebilir.<\/p>\n<h2>2. Laravel&#8217;de RBAC Uygulamak: Spatie Laravel-Permission Paketi<\/h2>\n<p>Laravel ekosisteminde RBAC uygulamak i\u00e7in en pop\u00fcler ve sa\u011flam \u00e7\u00f6z\u00fcmlerden biri Spatie&#8217;nin <code>laravel-permission<\/code> paketidir. Bu paket, rolleri ve izinleri veritaban\u0131nda y\u00f6netmenize, kullan\u0131c\u0131lara ataman\u0131za ve eri\u015fim kontrollerini kolayca ger\u00e7ekle\u015ftirmenize olanak tan\u0131r.<\/p>\n<h3>2.1. Kurulum ve Temel Yap\u0131land\u0131rma<\/h3>\n<p>\u00d6ncelikle, Laravel projenize paketi kurmal\u0131s\u0131n\u0131z:<\/p>\n<pre><code class=\"language-bash\">composer require spatie\/laravel-permission<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, paketin migration dosyalar\u0131n\u0131 yay\u0131mlay\u0131n ve veritaban\u0131n\u0131 g\u00fcncelleyin:<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --provider=\"Spatie\\Permission\\PermissionServiceProvider\" --tag=\"permission-migrations\"\nphp artisan migrate<\/pre>\n<p><\/code><\/p>\n<p>Bu komutlar, <code>roles<\/code> ve <code>permissions<\/code> tablolar\u0131n\u0131 ve ara tablolar\u0131 (<code>model_has_roles<\/code>, <code>model_has_permissions<\/code>, <code>role_has_permissions<\/code>) olu\u015fturacakt\u0131r.<\/p>\n<p>Son olarak, <code>User<\/code> modelinize <code>HasRoles<\/code> trait'ini ekleyin:<\/p>\n<pre><code class=\"language-php\">\/\/ app\/Models\/User.php\nnamespace App\\Models;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Laravel\\Sanctum\\HasApiTokens;\nuse Spatie\\Permission\\Traits\\HasRoles; \/\/ Bu sat\u0131r\u0131 ekleyin\n\nclass User extends Authenticatable\n{\n    use HasApiTokens, HasFactory, Notifiable, HasRoles; \/\/ Buraya HasRoles ekleyin\n\n    \/\/ ... di\u011fer model \u00f6zellikleri\n}<\/pre>\n<p><\/code><\/p>\n<h3>2.2. Rol ve \u0130zin Tan\u0131mlama<\/h3>\n<p>Rolleri ve izinleri veritaban\u0131na eklemek i\u00e7in Tinkerwell veya bir seeder kullanabilirsiniz:<\/p>\n<pre><code class=\"language-php\">\/\/ database\/seeders\/RolesAndPermissionsSeeder.php\nuse Illuminate\\Database\\Seeder;\nuse Spatie\\Permission\\Models\\Role;\nuse Spatie\\Permission\\Models\\Permission;\n\nclass RolesAndPermissionsSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u00d6nbelle\u011fi temizle\n        app()[\\Spatie\\Permission\\PermissionRegistrar::class]->forgetCachedPermissions();\n\n        \/\/ \u0130zinleri olu\u015ftur\n        Permission::create(['name' => 'edit articles']);\n        Permission::create(['name' => 'delete articles']);\n        Permission::create(['name' => 'publish articles']);\n        Permission::create(['name' => 'view admin panel']);\n        Permission::create(['name' => 'manage users']);\n\n        \/\/ Rolleri olu\u015ftur ve izinleri ata\n        $roleAdmin = Role::create(['name' => 'admin']);\n        $roleAdmin->givePermissionTo(Permission::all()); \/\/ T\u00fcm izinleri admin'e ver\n\n        $roleEditor = Role::create(['name' => 'editor']);\n        $roleEditor->givePermissionTo(['edit articles', 'publish articles']);\n\n        $roleViewer = Role::create(['name' => 'viewer']);\n        $roleViewer->givePermissionTo(['view admin panel']);\n    }\n}<\/pre>\n<p><\/code><\/p>\n<p>Seeder'\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n: <code>php artisan db:seed --class=RolesAndPermissionsSeeder<\/code><\/p>\n<h3>2.3. Kullan\u0131c\u0131lara Rol ve \u0130zin Atama<\/h3>\n<p>Bir kullan\u0131c\u0131ya rol veya do\u011frudan izin atamak \u00e7ok kolayd\u0131r:<\/p>\n<pre><code class=\"language-php\">$user = App\\Models\\User::find(1);\n\n\/\/ Kullan\u0131c\u0131ya 'admin' rol\u00fcn\u00fc ata\n$user->assignRole('admin');\n\n\/\/ Kullan\u0131c\u0131ya do\u011frudan 'delete articles' iznini ver (rol\u00fc olmasa bile)\n$user->givePermissionTo('delete articles');\n\n\/\/ Kullan\u0131c\u0131n\u0131n rol\u00fcn\u00fc kontrol et\nif ($user->hasRole('admin')) {\n    \/\/ ...\n}\n\n\/\/ Kullan\u0131c\u0131n\u0131n iznini kontrol et\nif ($user->can('edit articles')) {\n    \/\/ ...\n}\n\n\/\/ Bir rolden izinleri kald\u0131r\n$roleEditor->revokePermissionTo('publish articles');\n\n\/\/ Bir kullan\u0131c\u0131dan rol\u00fc kald\u0131r\n$user->removeRole('admin');<\/pre>\n<p><\/code><\/p>\n<h3>2.4. Middleware ve Blade Direktifleri ile Eri\u015fim Kontrol\u00fc<\/h3>\n<p>Laravel'de rota ve view seviyesinde eri\u015fim kontrol\u00fc i\u00e7in middleware ve Blade direktiflerini kullanabilirsiniz.<\/p>\n<p><strong>Middleware ile Rota Korumas\u0131:<\/strong><\/p>\n<p><code>web.php<\/code> veya <code>api.php<\/code> rotalar\u0131n\u0131za middleware ekleyin:<\/p>\n<pre><code class=\"language-php\">\/\/ Sadece 'admin' rol\u00fcne sahip kullan\u0131c\u0131lar eri\u015febilir\nRoute::group(['middleware' => ['role:admin']], function () {\n    Route::get('\/admin\/dashboard', [AdminController::class, 'dashboard']);\n});\n\n\/\/ 'edit articles' iznine sahip kullan\u0131c\u0131lar eri\u015febilir\nRoute::middleware(['permission:edit articles'])->group(function () {\n    Route::get('\/articles\/{article}\/edit', [ArticleController::class, 'edit']);\n});\n\n\/\/ Birden fazla rol veya izin i\u00e7in\nRoute::middleware(['role:admin|editor', 'permission:publish articles'])->group(function () {\n    Route::get('\/articles\/publish-queue', [ArticleController::class, 'publishQueue']);\n});<\/pre>\n<p><\/code><\/p>\n<p><strong>Blade Direktifleri ile UI Korumas\u0131:<\/strong><\/p>\n<p>View dosyalar\u0131n\u0131zda, kullan\u0131c\u0131 yetkilerine g\u00f6re UI elementlerini gizleyip g\u00f6sterebilirsiniz:<\/p>\n<pre><code class=\"language-html\"><!-- Sadece 'admin' rol\u00fcne sahip kullan\u0131c\u0131lar g\u00f6r\u00fcr -->\n@role('admin')\n    <a href=\"\/admin\/settings\">Y\u00f6netici Ayarlar\u0131<\/a>\n@endrole\n\n<!-- 'edit articles' iznine sahip kullan\u0131c\u0131lar g\u00f6r\u00fcr -->\n@can('edit articles')\n    <button>Makaleyi D\u00fczenle<\/button>\n@elsecan('view articles')\n    <p>Makaleyi g\u00f6r\u00fcnt\u00fcleme izniniz var.<\/p>\n@endcan\n\n<!-- Birden fazla rol kontrol\u00fc -->\n@hasrole(['admin', 'editor'])\n    <p>Bu i\u00e7erik y\u00f6netici veya edit\u00f6rler i\u00e7indir.<\/p>\n@endhasrole<\/pre>\n<p><\/code><\/p>\n<h2>3. Laravel API'sini RBAC ile G\u00fc\u00e7lendirmek<\/h2>\n<p>Next.js gibi bir frontend ile \u00e7al\u0131\u015f\u0131rken, Laravel'in bir API g\u00f6revi g\u00f6rmesi ve yetkilendirme bilgilerini frontend'e sa\u011flamas\u0131 gerekir.<\/p>\n<h3>3.1. API Kimlik Do\u011frulama (Sanctum veya JWT)<\/h3>\n<p>Next.js frontend'den gelen istekleri do\u011frulamak i\u00e7in Laravel Sanctum veya JWT (JSON Web Tokens) kullanabilirsiniz. Sanctum, SPA'lar i\u00e7in \u00e7erez tabanl\u0131 kimlik do\u011frulama ve API token'lar\u0131 i\u00e7in basit bir mekanizma sunar.<\/p>\n<p><strong>Sanctum Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">composer require laravel\/sanctum\nphp artisan vendor:publish --provider=\"Laravel\\Sanctum\\SanctumServiceProvider\"\nphp artisan migrate<\/pre>\n<p><\/code><\/p>\n<p><code>app\/Http\/Kernel.php<\/code> dosyas\u0131nda API middleware grubuna <code>EnsureFrontendRequestsAreStateful<\/code> middleware'ini ekleyin. <code>User<\/code> modelinize <code>HasApiTokens<\/code> trait'ini ekledi\u011finizden emin olun.<\/p>\n<h3>3.2. \u0130zinleri API Yan\u0131tlar\u0131nda Sunmak<\/h3>\n<p>Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda veya profil bilgilerini \u00e7ekti\u011finde, kullan\u0131c\u0131n\u0131n sahip oldu\u011fu rolleri ve izinleri API yan\u0131t\u0131na dahil etmek, Next.js uygulamas\u0131n\u0131n UI'yi buna g\u00f6re \u015fekillendirmesi i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-php\">\/\/ app\/Http\/Controllers\/AuthController.php (\u00d6rnek)\npublic function login(Request $request)\n{\n    \/\/ ... kimlik do\u011frulama mant\u0131\u011f\u0131 ...\n\n    if (Auth::attempt($credentials)) {\n        $user = Auth::user();\n        $token = $user->createToken('auth_token')->plainTextToken;\n\n        return response()->json([\n            'user' => [\n                'id' => $user->id,\n                'name' => $user->name,\n                'email' => $user->email,\n                'roles' => $user->getRoleNames(), \/\/ Kullan\u0131c\u0131n\u0131n rol isimlerini d\u00f6nd\u00fcr\n                'permissions' => $user->getAllPermissions()->pluck('name'), \/\/ T\u00fcm izin isimlerini d\u00f6nd\u00fcr\n            ],\n            'token' => $token,\n        ]);\n    }\n\n    return response()->json(['message' => 'Unauthorized'], 401);\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu yan\u0131t, Next.js uygulamas\u0131n\u0131n kullan\u0131c\u0131n\u0131n yetkilerini an\u0131nda bilmesini sa\u011flar.<\/p>\n<h3>3.3. API Endpointlerinde Yetkilendirme<\/h3>\n<p>Laravel API endpoint'lerini korumak i\u00e7in yine <code>permission<\/code> veya <code>role<\/code> middleware'lerini kullan\u0131n.<\/p>\n<pre><code class=\"language-php\">\/\/ routes\/api.php\nuse App\\Http\\Controllers\\Api\\ArticleController;\nuse App\\Http\\Controllers\\Api\\UserController;\n\nRoute::middleware('auth:sanctum')->group(function () {\n    \/\/ Makale i\u015flemleri\n    Route::get('\/articles', [ArticleController::class, 'index']);\n    Route::post('\/articles', [ArticleController::class, 'store'])->middleware('permission:create articles');\n    Route::put('\/articles\/{article}', [ArticleController::class, 'update'])->middleware('permission:edit articles');\n    Route::delete('\/articles\/{article}', [ArticleController::class, 'destroy'])->middleware('permission:delete articles');\n\n    \/\/ Kullan\u0131c\u0131 y\u00f6netimi\n    Route::get('\/users', [UserController::class, 'index'])->middleware('role:admin');\n    Route::post('\/users', [UserController::class, 'store'])->middleware('permission:manage users');\n});<\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fekilde, frontend'den gelen yetkisiz istekler Laravel taraf\u0131ndan 403 Forbidden hatas\u0131yla reddedilecektir.<\/p>\n<h2>4. Next.js Frontend'de RBAC Entegrasyonu<\/h2>\n<p>Next.js taraf\u0131nda RBAC, kullan\u0131c\u0131 deneyimini iyile\u015ftirmek ve yetkisiz kullan\u0131c\u0131lar\u0131n eri\u015fmemesi gereken UI elementlerini veya sayfalar\u0131 gizlemek i\u00e7in kullan\u0131l\u0131r. <strong>Unutmay\u0131n: Frontend'deki kontroller asla tek ba\u015f\u0131na g\u00fcvenlik katman\u0131 olmamal\u0131d\u0131r. Ger\u00e7ek yetkilendirme her zaman backend'de yap\u0131lmal\u0131d\u0131r.<\/strong><\/p>\n<h3>4.1. Kullan\u0131c\u0131 Bilgilerini ve \u0130zinleri Y\u00f6netmek<\/h3>\n<p>Laravel API'sinden gelen kullan\u0131c\u0131 ve izin bilgilerini Next.js uygulaman\u0131zda merkezi bir yerde saklaman\u0131z gerekir. Bunun i\u00e7in React Context API, Redux Toolkit veya Zustand gibi bir state y\u00f6netim k\u00fct\u00fcphanesi kullanabilirsiniz.<\/p>\n<p><strong>\u00d6rnek: Context API ile Kullan\u0131c\u0131 Ba\u011flam\u0131<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ contexts\/AuthContext.js\nimport { createContext, useContext, useState, useEffect } from 'react';\nimport axios from 'axios'; \/\/ Axios veya fetch kullanabilirsiniz\n\nconst AuthContext = createContext(null);\n\nexport const AuthProvider = ({ children }) => {\n  const [user, setUser] = useState(null);\n  const [loading, setLoading] = useState(true);\n\n  useEffect(() => {\n    const loadUser = async () => {\n      const token = localStorage.getItem('authToken');\n      if (token) {\n        axios.defaults.headers.common['Authorization'] = <code>Bearer ${token}<\/code>;\n        try {\n          const { data } = await axios.get('\/api\/user'); \/\/ Laravel'den kullan\u0131c\u0131 bilgilerini \u00e7eken bir endpoint\n          setUser(data.user); \/\/ user objesi i\u00e7inde roles ve permissions olmal\u0131\n        } catch (error) {\n          console.error(\"Failed to load user:\", error);\n          localStorage.removeItem('authToken');\n        }\n      }\n      setLoading(false);\n    };\n    loadUser();\n  }, []);\n\n  const login = async (email, password) => {\n    setLoading(true);\n    try {\n      const { data } = await axios.post('\/api\/login', { email, password });\n      localStorage.setItem('authToken', data.token);\n      axios.defaults.headers.common['Authorization'] = <code>Bearer ${data.token}<\/code>;\n      setUser(data.user);\n      return true;\n    } catch (error) {\n      console.error(\"Login failed:\", error);\n      return false;\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const logout = () => {\n    localStorage.removeItem('authToken');\n    delete axios.defaults.headers.common['Authorization'];\n    setUser(null);\n  };\n\n  const hasPermission = (permissionName) => {\n    return user && user.permissions && user.permissions.includes(permissionName);\n  };\n\n  const hasRole = (roleName) => {\n    return user && user.roles && user.roles.includes(roleName);\n  };\n\n  return (\n    <AuthContext.Provider value={{ user, loading, login, logout, hasPermission, hasRole }}>\n      {children}\n    <\/AuthContext.Provider>\n  );\n};\n\nexport const useAuth = () => useContext(AuthContext);<\/pre>\n<p><\/code><\/p>\n<p><code>_app.js<\/code> dosyas\u0131nda <code>AuthProvider<\/code>'\u0131 sarmalay\u0131n.<\/p>\n<h3>4.2. UI Elementlerini \u0130zinlere G\u00f6re Gizleme\/G\u00f6sterme<\/h3>\n<p>Frontend'de <code>hasPermission<\/code> veya <code>hasRole<\/code> fonksiyonlar\u0131n\u0131 kullanarak butonlar\u0131, men\u00fc \u00f6\u011felerini veya di\u011fer UI bile\u015fenlerini ko\u015fullu olarak render edebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ components\/ArticleList.js\nimport { useAuth } from '..\/contexts\/AuthContext';\n\nfunction ArticleList({ articles }) {\n  const { hasPermission } = useAuth();\n\n  return (\n    <div>\n      <h2>Makaleler<\/h2>\n      {hasPermission('create articles') && (\n        <button>Yeni Makale Olu\u015ftur<\/button>\n      )}\n      <ul>\n        {articles.map(article => (\n          <li key={article.id}>\n            {article.title}\n            {hasPermission('edit articles') && (\n              <button>D\u00fczenle<\/button>\n            )}\n            {hasPermission('delete articles') && (\n              <button>Sil<\/button>\n            )}\n          <\/li>\n        ))}\n      <\/ul>\n    <\/div>\n  );\n}<\/pre>\n<p><\/code><\/p>\n<h3>4.3. Rota Korumas\u0131 (Route Guarding) Uygulamak<\/h3>\n<p>Belirli sayfalar\u0131n sadece yetkili kullan\u0131c\u0131lar taraf\u0131ndan eri\u015filebilir olmas\u0131n\u0131 sa\u011flamak i\u00e7in rota korumas\u0131 uygulayabilirsiniz. Bu genellikle bir Higher-Order Component (HOC) veya \u00f6zel bir hook ile yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ components\/withAuth.js\nimport { useEffect } from 'react';\nimport { useRouter } from 'next\/router';\nimport { useAuth } from '..\/contexts\/AuthContext';\n\nconst withAuth = (WrappedComponent, requiredPermissions = [], requiredRoles = []) => {\n  return (props) => {\n    const { user, loading, hasPermission, hasRole } = useAuth();\n    const router = useRouter();\n\n    useEffect(() => {\n      if (!loading) {\n        if (!user) {\n          router.push('\/login'); \/\/ Giri\u015f yapmam\u0131\u015fsa login sayfas\u0131na y\u00f6nlendir\n        } else {\n          const hasAllPermissions = requiredPermissions.every(perm => hasPermission(perm));\n          const hasAnyRole = requiredRoles.length === 0 || requiredRoles.some(role => hasRole(role));\n\n          if (!hasAllPermissions || !hasAnyRole) {\n            router.push('\/unauthorized'); \/\/ Yeterli izni yoksa yetkisiz sayfas\u0131na y\u00f6nlendir\n          }\n        }\n      }\n    }, [user, loading, router, requiredPermissions, requiredRoles, hasPermission, hasRole]);\n\n    if (loading || !user || !requiredPermissions.every(perm => hasPermission(perm)) || (requiredRoles.length > 0 && !requiredRoles.some(role => hasRole(role)))) {\n      return <p>Y\u00fckleniyor veya Yetkilendiriliyor...<\/p>; \/\/ Y\u00fckleme veya yetkilendirme s\u0131ras\u0131nda g\u00f6sterilecek\n    }\n\n    return <WrappedComponent {...props} \/>;\n  };\n};\n\nexport default withAuth;<\/pre>\n<p><\/code><\/p>\n<p>Sayfay\u0131 korumak i\u00e7in:<\/p>\n<pre><code class=\"language-javascript\">\/\/ pages\/admin\/dashboard.js\nimport withAuth from '..\/..\/components\/withAuth';\n\nfunction AdminDashboard() {\n  return (\n    <div>\n      <h1>Y\u00f6netici Paneli<\/h1>\n      <p>Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.<\/p>\n    <\/div>\n  );\n}\n\nexport default withAuth(AdminDashboard, ['view admin panel'], ['admin']);<\/pre>\n<p><\/code><\/p>\n<h2>5. RBAC Uygulamas\u0131nda En \u0130yi Uygulamalar ve G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h2>\n<p>RBAC sisteminizi kurarken ve y\u00f6netirken dikkat etmeniz gereken baz\u0131 \u00f6nemli noktalar:<\/p>\n<h3>5.1. \u0130zinleri Detayland\u0131rma ve Y\u00f6netme<\/h3>\n<p>*   <strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> Kullan\u0131c\u0131lara veya rollere sadece i\u015flerini yapmalar\u0131 i\u00e7in gerekli olan minimum izinleri atay\u0131n. Gereksiz yetkiler g\u00fcvenlik risklerini art\u0131r\u0131r.<br \/>\n*   <strong>\u0130simlendirme Standartlar\u0131:<\/strong> \u0130zin ve rol isimleri tutarl\u0131 ve a\u00e7\u0131klay\u0131c\u0131 olmal\u0131d\u0131r (\u00f6rn. <code>user_create<\/code>, <code>user_edit<\/code>, <code>article_publish<\/code>).<br \/>\n*   <strong>\u0130zinleri Grupland\u0131rma:<\/strong> \u00c7ok say\u0131da izniniz varsa, bunlar\u0131 mant\u0131ksal gruplara ay\u0131rarak y\u00f6netimi kolayla\u015ft\u0131rabilirsiniz (\u00f6rn. <code>article.*<\/code>, <code>user.*<\/code>). Spatie paketi bu t\u00fcr wildcard izinleri destekler.<br \/>\n*   <strong>Rol Hiyerar\u015fisi:<\/strong> Baz\u0131 rollerin di\u011ferlerini i\u00e7erdi\u011fi hiyerar\u015fik bir yap\u0131 d\u00fc\u015f\u00fcnebilirsiniz (\u00f6rn. \"S\u00fcper Y\u00f6netici\" t\u00fcm \"Y\u00f6netici\" izinlerine sahip olabilir). Spatie paketi do\u011frudan hiyerar\u015fi sunmasa da, bunu kodunuzda veya \u00f6zel rollerle y\u00f6netebilirsiniz.<\/p>\n<h3>5.2. Performans Optimizasyonu<\/h3>\n<p>*   <strong>\u0130zin \u00d6nbellekleme:<\/strong> Spatie <code>laravel-permission<\/code> paketi, izinleri veritaban\u0131ndan her seferinde \u00e7ekmek yerine \u00f6nbelle\u011fe al\u0131r. Bu, performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Yeni izin veya rol ekledi\u011finizde \u00f6nbelle\u011fi temizlemeyi unutmay\u0131n (<code>php artisan permission:cache-reset<\/code>).<br \/>\n*   <strong>Lazy Loading:<\/strong> Kullan\u0131c\u0131 modelinizdeki roller ve izinler ili\u015fkilerini gerekti\u011finde y\u00fcklemek i\u00e7in lazy loading kullan\u0131n.<br \/>\n*   <strong>Veritaban\u0131 \u0130ndeksleri:<\/strong> <code>roles<\/code>, <code>permissions<\/code> ve ara tablolardaki ilgili s\u00fctunlarda (\u00f6rn. <code>model_id<\/code>, <code>role_id<\/code>, <code>permission_id<\/code>) indeksler oldu\u011fundan emin olun.<\/p>\n<h3>5.3. G\u00fcvenlik A\u00e7\u0131klar\u0131na Kar\u015f\u0131 Korunma<\/h3>\n<p>*   <strong>Asla Frontend'e G\u00fcvenmeyin:<\/strong> Frontend'deki t\u00fcm RBAC kontrolleri yaln\u0131zca kullan\u0131c\u0131 deneyimi i\u00e7indir. Ger\u00e7ek yetkilendirme kararlar\u0131 her zaman backend'de al\u0131nmal\u0131d\u0131r. Frontend'deki kontroller atlanabilir veya manip\u00fcle edilebilir.<br \/>\n*   <strong>API Kimlik Do\u011frulama:<\/strong> API'lerinizin sa\u011flam bir kimlik do\u011frulama mekanizmas\u0131yla (Sanctum, JWT) korundu\u011fundan emin olun.<br \/>\n*   <strong>Giri\u015f Do\u011frulama:<\/strong> Gelen t\u00fcm istekleri (\u00f6zellikle kullan\u0131c\u0131 girdilerini) Laravel'in do\u011frulama mekanizmalar\u0131yla kapsaml\u0131 bir \u015fekilde do\u011frulay\u0131n.<br \/>\n*   <strong>G\u00fcncel Tutma:<\/strong> Laravel, Next.js ve kulland\u0131\u011f\u0131n\u0131z t\u00fcm paketleri (\u00f6zellikle g\u00fcvenlik paketlerini) d\u00fczenli olarak g\u00fcncelleyin.<br \/>\n*   <strong>Hata Y\u00f6netimi:<\/strong> Yetkilendirme hatalar\u0131n\u0131 (403 Forbidden) kullan\u0131c\u0131ya anla\u015f\u0131l\u0131r bir \u015fekilde bildirin ancak g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olu\u015fturacak detaylar\u0131 if\u015fa etmeyin.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc (RBAC), modern web uygulamalar\u0131nda g\u00fcvenli\u011fi ve y\u00f6netilebilirli\u011fi art\u0131rmak i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Laravel'in g\u00fc\u00e7l\u00fc backend yetenekleri ve Spatie <code>laravel-permission<\/code> paketi sayesinde, kapsaml\u0131 bir RBAC sistemini kolayca kurabilirsiniz. Next.js ile bu backend'i entegre ederek, kullan\u0131c\u0131lar\u0131n\u0131za yetkilerine g\u00f6re ki\u015fiselle\u015ftirilmi\u015f ve g\u00fcvenli bir aray\u00fcz sunabilirsiniz. Unutmay\u0131n ki g\u00fcvenlik \u00e7ok katmanl\u0131 bir yap\u0131d\u0131r ve frontend'deki kontroller asla backend'deki s\u0131k\u0131 yetkilendirme kurallar\u0131n\u0131n yerini almamal\u0131d\u0131r. Bu k\u0131lavuzdaki ad\u0131mlar\u0131 takip ederek, Laravel ve Next.js ile RBAC'yi ustal\u0131kla uygulayabilir, hem g\u00fcvenli hem de kullan\u0131c\u0131 dostu uygulamalar geli\u015ftirebilirsiniz.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>RBAC ile ABAC aras\u0131ndaki fark nedir?<\/h3>\n<p>RBAC (Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc), eri\u015fimi kullan\u0131c\u0131n\u0131n rol\u00fcne g\u00f6re belirler (\u00f6rn. \"Y\u00f6netici her \u015feyi yapabilir\"). ABAC (Nitelik Tabanl\u0131 Eri\u015fim Kontrol\u00fc) ise eri\u015fimi kullan\u0131c\u0131, kaynak, ortam ve eylem gibi \u00e7e\u015fitli niteliklere g\u00f6re dinamik olarak belirler (\u00f6rn. \"Finans departman\u0131ndaki bir kullan\u0131c\u0131, mesai saatleri i\u00e7inde kendi b\u00f6lgesindeki finans raporlar\u0131na eri\u015febilir\"). ABAC daha esnek ve ince taneli kontrol sa\u011flarken, RBAC daha basittir ve \u00e7o\u011fu senaryo i\u00e7in yeterlidir.<\/p>\n<h3>Laravel-Permission paketi yerine kendi RBAC sistemimi yazmal\u0131 m\u0131y\u0131m?<\/h3>\n<p>\u00c7o\u011fu durumda, Spatie Laravel-Permission paketi gibi iyi test edilmi\u015f ve bak\u0131m\u0131 yap\u0131lan bir paketi kullanmak, kendi sisteminizi yazmaktan \u00e7ok daha iyidir. Kendi sisteminizi yazmak zaman al\u0131c\u0131d\u0131r, hata yapma potansiyeli y\u00fcksektir ve g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir. Paket, topluluk taraf\u0131ndan desteklenir ve s\u00fcrekli g\u00fcncellenir. Ancak \u00e7ok \u00f6zel, ni\u015f bir ihtiyac\u0131n\u0131z varsa ve paket bunu kar\u015f\u0131lam\u0131yorsa, kendi \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fc d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<h3>Next.js taraf\u0131nda izinleri saklamak g\u00fcvenli midir?<\/h3>\n<p>Next.js (veya herhangi bir frontend) taraf\u0131nda izinleri saklamak ve bunlara g\u00f6re UI'yi \u015fekillendirmek kullan\u0131c\u0131 deneyimi i\u00e7in faydal\u0131d\u0131r, ancak <strong>g\u00fcvenli de\u011fildir<\/strong>. Frontend'deki her t\u00fcrl\u00fc kontrol atlanabilir veya manip\u00fcle edilebilir. Ger\u00e7ek yetkilendirme kararlar\u0131 her zaman Laravel backend'inde, API endpoint'lerine yap\u0131lan her istekte kontrol edilmelidir. Frontend sadece \"kullan\u0131c\u0131ya ne g\u00f6sterilece\u011fini\" belirler, \"kullan\u0131c\u0131n\u0131n ne yapabilece\u011fini\" de\u011fil.<\/p>\n<h3>\u00c7ok say\u0131da rol ve iznim varsa performans sorunlar\u0131 ya\u015far m\u0131y\u0131m?<\/h3>\n<p>Spatie Laravel-Permission paketi, izinleri ve rolleri \u00f6nbelle\u011fe alarak performans sorunlar\u0131n\u0131 minimize etmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Veritaban\u0131 sorgular\u0131n\u0131 azalt\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"Makaleyi g\u00f6r\u00fcnt\u00fcleme izniniz var.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[133],"tags":[],"class_list":{"0":"post-36523","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak\" \/>\n<meta property=\"og:description\" content=\"Makaleyi g\u00f6r\u00fcnt\u00fcleme izniniz var.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-19T06:30:49+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak\",\"datePublished\":\"2025-12-19T06:30:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\"},\"wordCount\":2027,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PHP\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\",\"name\":\"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-19T06:30:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/","og_locale":"tr_TR","og_type":"article","og_title":"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak","og_description":"Makaleyi g\u00f6r\u00fcnt\u00fcleme izniniz var.","og_url":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-19T06:30:49+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak","datePublished":"2025-12-19T06:30:49+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/"},"wordCount":2027,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PHP"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/","url":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/","name":"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-19T06:30:49+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-ve-next-js-ile-rol-tabanli-erisim-kontrolunu-rbac-ustalasmak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Laravel ve Next.js ile Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fcn\u00fc (RBAC) Ustala\u015fmak"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36523"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36523\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}