{"id":246,"date":"2025-08-27T16:01:35","date_gmt":"2025-08-27T16:01:35","guid":{"rendered":"https:\/\/1v0.net\/blog\/?p=246"},"modified":"2025-08-27T16:01:37","modified_gmt":"2025-08-27T16:01:37","slug":"how-to-create-a-multi-level-role-permission-system-in-laravel","status":"publish","type":"post","link":"https:\/\/1v0.net\/blog\/how-to-create-a-multi-level-role-permission-system-in-laravel\/","title":{"rendered":"How to Create a Multi-Level Role &amp; Permission System in Laravel"},"content":{"rendered":"\n<p>As applications grow, a simple \u201cAdmin vs User\u201d setup is rarely enough. You might need multiple levels of access: <strong>Super Admins<\/strong> who control everything, <strong>Managers<\/strong> who oversee teams, and <strong>Users<\/strong> who only manage their own data. In <strong>Laravel 12<\/strong>, you can build a flexible <strong>multi-level role and permission system<\/strong> using the <strong>Spatie Permissions<\/strong> package.<\/p>\n\n\n\n<p>In this guide, we\u2019ll walk through creating hierarchical roles and assigning permissions at different levels. We\u2019ll also add a UI so admins can manage roles dynamically, without writing code.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1 &#8211; Setting Up Spatie Permissions<\/strong><\/h2>\n\n\n\n<p>Make sure you\u2019ve installed and configured Spatie Permissions. If not, follow our <a href=\"\/blog\/laravel-spatie-permissions-step-by-step-installation-setup\">installation guide<\/a>. Once set up, add the <code>HasRoles<\/code> trait to your <code>User<\/code> model and run the migrations.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2 &#8211; Defining Multi-Level Roles<\/strong><\/h2>\n\n\n\n<p>Let\u2019s create three levels of roles: <strong>Super Admin<\/strong>, <strong>Manager<\/strong>, and <strong>User<\/strong>. Super Admins have all permissions, Managers have elevated access, and Users have limited access.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ database\/seeders\/MultiLevelRolesSeeder.php<\/span>\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">Database<\/span>\\<span class=\"hljs-title\">Seeders<\/span>;\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Database<\/span>\\<span class=\"hljs-title\">Seeder<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Spatie<\/span>\\<span class=\"hljs-title\">Permission<\/span>\\<span class=\"hljs-title\">Models<\/span>\\<span class=\"hljs-title\">Role<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Spatie<\/span>\\<span class=\"hljs-title\">Permission<\/span>\\<span class=\"hljs-title\">Models<\/span>\\<span class=\"hljs-title\">Permission<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MultiLevelRolesSeeder<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Seeder<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">run<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        $superAdmin = Role::create(&#91;<span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'super-admin'<\/span>]);\n        $manager = Role::create(&#91;<span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'manager'<\/span>]);\n        $user = Role::create(&#91;<span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'user'<\/span>]);\n\n        <span class=\"hljs-comment\">\/\/ Permissions<\/span>\n        $manageUsers = Permission::create(&#91;<span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'manage users'<\/span>]);\n        $viewReports = Permission::create(&#91;<span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'view reports'<\/span>]);\n        $editProfile = Permission::create(&#91;<span class=\"hljs-string\">'name'<\/span> =&gt; <span class=\"hljs-string\">'edit profile'<\/span>]);\n\n        <span class=\"hljs-comment\">\/\/ Assign permissions<\/span>\n        $superAdmin-&gt;givePermissionTo(&#91;$manageUsers, $viewReports, $editProfile]);\n        $manager-&gt;givePermissionTo(&#91;$viewReports, $editProfile]);\n        $user-&gt;givePermissionTo(&#91;$editProfile]);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This creates three distinct access levels. Each level includes the permissions of the one below it.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3 &#8211; Middleware Protection<\/strong><\/h2>\n\n\n\n<p>Now, protect routes based on roles or permissions:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ routes\/web.php<\/span>\n\n<span class=\"hljs-comment\">\/\/ Super Admin only<\/span>\nRoute::middleware(&#91;<span class=\"hljs-string\">'auth'<\/span>,<span class=\"hljs-string\">'role:super-admin'<\/span>])-&gt;group(<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n    Route::get(<span class=\"hljs-string\">'\/admin\/settings'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">'Settings Page'<\/span>;\n    });\n});\n\n<span class=\"hljs-comment\">\/\/ Managers and above<\/span>\nRoute::middleware(&#91;<span class=\"hljs-string\">'auth'<\/span>,<span class=\"hljs-string\">'role:manager|super-admin'<\/span>])-&gt;group(<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n    Route::get(<span class=\"hljs-string\">'\/reports'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">'Reports Page'<\/span>;\n    });\n});\n\n<span class=\"hljs-comment\">\/\/ All authenticated users<\/span>\nRoute::middleware(&#91;<span class=\"hljs-string\">'auth'<\/span>,<span class=\"hljs-string\">'role:user|manager|super-admin'<\/span>])-&gt;group(<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n    Route::get(<span class=\"hljs-string\">'\/profile'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">'Profile Page'<\/span>;\n    });\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Using multiple roles in the middleware ensures a hierarchy of access \u2014 higher-level roles automatically get lower-level privileges.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4 &#8211; Role Inheritance with Gates<\/strong><\/h2>\n\n\n\n<p>If you want a more formal hierarchy, you can extend roles via custom logic. For example, treat <code>super-admin<\/code> as having all permissions without assigning them manually.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ app\/Providers\/AuthServiceProvider.php<\/span>\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Support<\/span>\\<span class=\"hljs-title\">Facades<\/span>\\<span class=\"hljs-title\">Gate<\/span>;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">boot<\/span><span class=\"hljs-params\">()<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">$this<\/span>-&gt;registerPolicies();\n\n    Gate::before(<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">($user, $ability)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> $user-&gt;hasRole(<span class=\"hljs-string\">'super-admin'<\/span>) ? <span class=\"hljs-keyword\">true<\/span> : <span class=\"hljs-keyword\">null<\/span>;\n    });\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This ensures that super-admins can do anything, regardless of specific permissions.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5 &#8211; Admin UI for Multi-Level Roles<\/strong><\/h2>\n\n\n\n<p>Finally, let\u2019s create a simple admin panel where Super Admins can assign roles to users. This UI helps non-technical admins manage multi-level access.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ routes\/web.php<\/span>\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Http<\/span>\\<span class=\"hljs-title\">Controllers<\/span>\\<span class=\"hljs-title\">Admin<\/span>\\<span class=\"hljs-title\">UserRoleController<\/span>;\n\nRoute::middleware(&#91;<span class=\"hljs-string\">'auth'<\/span>,<span class=\"hljs-string\">'role:super-admin'<\/span>])-&gt;group(<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n    Route::get(<span class=\"hljs-string\">'\/admin\/users\/{user}\/roles'<\/span>, &#91;UserRoleController::class, <span class=\"hljs-string\">'edit'<\/span>])-&gt;name(<span class=\"hljs-string\">'admin.users.roles.edit'<\/span>);\n    Route::put(<span class=\"hljs-string\">'\/admin\/users\/{user}\/roles'<\/span>, &#91;UserRoleController::class, <span class=\"hljs-string\">'update'<\/span>])-&gt;name(<span class=\"hljs-string\">'admin.users.roles.update'<\/span>);\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ app\/Http\/Controllers\/Admin\/UserRoleController.php<\/span>\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Http<\/span>\\<span class=\"hljs-title\">Controllers<\/span>\\<span class=\"hljs-title\">Admin<\/span>;\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Http<\/span>\\<span class=\"hljs-title\">Controllers<\/span>\\<span class=\"hljs-title\">Controller<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Models<\/span>\\<span class=\"hljs-title\">User<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Http<\/span>\\<span class=\"hljs-title\">Request<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Spatie<\/span>\\<span class=\"hljs-title\">Permission<\/span>\\<span class=\"hljs-title\">Models<\/span>\\<span class=\"hljs-title\">Role<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">UserRoleController<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Controller<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">edit<\/span><span class=\"hljs-params\">(User $user)<\/span>\n    <\/span>{\n        $roles = Role::all();\n        <span class=\"hljs-keyword\">return<\/span> view(<span class=\"hljs-string\">'admin.users.edit-roles'<\/span>, compact(<span class=\"hljs-string\">'user'<\/span>,<span class=\"hljs-string\">'roles'<\/span>));\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">update<\/span><span class=\"hljs-params\">(Request $request, User $user)<\/span>\n    <\/span>{\n        $user-&gt;syncRoles($request-&gt;roles);\n        <span class=\"hljs-keyword\">return<\/span> redirect()-&gt;back()-&gt;with(<span class=\"hljs-string\">'status'<\/span>,<span class=\"hljs-string\">'Roles updated successfully'<\/span>);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Blade view (<code>resources\/views\/admin\/users\/edit-roles.blade.php<\/code>):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@extends(<span class=\"hljs-string\">'layouts.app'<\/span>)\n\n@section(<span class=\"hljs-string\">'content'<\/span>)\n&lt;div <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span><\/span>=<span class=\"hljs-string\">\"container\"<\/span>&gt;\n  <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h2<\/span>&gt;<\/span>Assign Roles to {{ $user-&gt;name }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h2<\/span>&gt;<\/span><\/span>\n  <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"{{ route('admin.users.roles.update',$user) }}\"<\/span>&gt;<\/span>\n    @csrf\n    @method('PUT')\n    @foreach($roles as $role)\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-check\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-check-input\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"checkbox\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"roles&#91;]\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"{{ $role-&gt;name }}\"<\/span>\n          {{ $<span class=\"hljs-attr\">user-<\/span>&gt;<\/span>hasRole($role-&gt;name) ? 'checked' : '' }}&gt;\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-check-label\"<\/span>&gt;<\/span>{{ ucfirst($role-&gt;name) }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    @endforeach\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"submit\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-primary mt-3\"<\/span>&gt;<\/span>Save<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/span>\n@endsection<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This lets Super Admins manage roles across all levels, ensuring fine-grained access control in your application.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>We built a <strong>multi-level role and permission system in Laravel 12<\/strong> using Spatie Permissions. Roles like Super Admin, Manager, and User provide hierarchical access, with middleware and Gates ensuring proper control. By adding an admin UI, you empower administrators to manage roles dynamically, without writing code.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s Next<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/blog\/laravel-middleware-for-role-based-route-protection\">Laravel Middleware for Role-Based Route Protection<\/a> \u2014 secure routes effectively.<\/li>\n<li><a href=\"\/blog\/creating-a-role-specific-dashboard-in-laravel-12\">Creating a Role-Specific Dashboard in Laravel 12<\/a> \u2014 show different dashboards per role.<\/li>\n<li><a href=\"\/blog\/how-to-give-and-revoke-permissions-to-users-in-laravel\">How to Give and Revoke Permissions to Users in Laravel<\/a> \u2014 manage permissions dynamically.<\/li>\n<\/ul>\n\n","protected":false},"excerpt":{"rendered":"<p>As applications grow, a simple \u201cAdmin vs User\u201d setup is rarely enough. You might need multiple levels of access: Super Admins who control everything, Managers who oversee teams, and Users who only manage their own data. In Laravel 12, you can build a flexible multi-level role and permission system using the Spatie Permissions package. In [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":250,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[12,16,15,17],"class_list":["post-246","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-authentication","tag-permissions","tag-roles","tag-roles-and-permissions"],"_links":{"self":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts\/246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/comments?post=246"}],"version-history":[{"count":1,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts\/246\/revisions"}],"predecessor-version":[{"id":249,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts\/246\/revisions\/249"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/media\/250"}],"wp:attachment":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/media?parent=246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/categories?post=246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/tags?post=246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}