{"id":422,"date":"2026-09-08T22:17:19","date_gmt":"2026-09-08T14:17:19","guid":{"rendered":"https:\/\/tech.syneric.cloud\/?p=422"},"modified":"2026-09-08T22:21:51","modified_gmt":"2026-09-08T14:21:51","slug":"rbac-laravel-jetstream-spatie","status":"publish","type":"post","link":"https:\/\/tech.syneric.cloud\/?p=422","title":{"rendered":"RBAC Laravel :  Jetstream + Spatie"},"content":{"rendered":"<div class=\"otQkpb\" role=\"heading\" aria-level=\"3\" data-animation-nesting=\"\" data-sfc-cp=\"\" data-wiz-attrbind=\"aria-level=r535o_18\/fLk2Md\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 20px; font-weight: 600; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">\ud83c\udf0d Feature 1: Global Roles &amp; Permissions (Most Common)<!--TgQPHd|||[]--><\/div>\n<div class=\"n6owBd awi2gc\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAICxAA\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">In this setup, your Jetstream Teams and your Spatie Roles exist in <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">two completely separate worlds<!--TgQPHd|||[]--><\/strong>.<!--TgQPHd|||[]--><\/div>\n<ul class=\"KsbFXc U6u95\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-ved=\"2ahUKEwjGq92F_t6WAxVgZ2wGHWppB_AQ-7AUegYIAAgMEAA\" data-hveid=\"CAAIDBAA\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIDBAB\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">How it works:<!--TgQPHd|||[]--><\/strong> A user has a specific role (e.g., <code class=\"KDcb0c\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 1px solid rgb(240, 242, 245);\">Admin<!--TgQPHd|||[]--><\/code>, <code class=\"KDcb0c\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 1px solid rgb(240, 242, 245);\">Editor<!--TgQPHd|||[]--><\/code>, <code class=\"KDcb0c\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 1px solid rgb(240, 242, 245);\">Premium User<!--TgQPHd|||[]--><\/code>) that applies to the <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">entire application<!--TgQPHd|||[]--><\/strong>, regardless of which team they are currently viewing or managing.<!--TgQPHd|||[]--><\/span><!--TgQPHd|||[]--><\/li>\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIDBAE\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Jetstream&#8217;s Role:<!--TgQPHd|||[]--><\/strong> Jetstream handles the concept of teams, billing workspaces, or shared groups.<!--TgQPHd|||[]--><\/span><!--TgQPHd|||[]--><\/li>\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIDBAH\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Spatie&#8217;s Role:<!--TgQPHd|||[]--><\/strong> Spatie manages system-wide application access.<!--TgQPHd|||[]--><\/span><!--TgQPHd|||[]--><\/li>\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIDBAK\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" aria-owns=\"action-menu-parent-container\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Real-World Example:<!--TgQPHd|||[]--><\/strong> A SaaS platform where a user is a <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">&#8220;Premium Member&#8221; (Spatie Global Role)<!--TgQPHd|||[]--><\/strong> across the whole site, but they can still create and switch between different corporate projects\/teams (<strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Jetstream Features<!--TgQPHd|||[]--><\/strong>).<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div class=\"otQkpb\" role=\"heading\" aria-level=\"3\" data-animation-nesting=\"\" data-sfc-cp=\"\" data-wiz-attrbind=\"aria-level=r535o_2m\/fLk2Md\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 20px; font-weight: 600; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">\ud83d\udc65 Feature 2: Team-Based Roles &amp; Permissions (Advanced RBAC)<!--TgQPHd|||[]--><\/div>\n<div class=\"n6owBd awi2gc\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIDxAA\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">In this setup, a user\u2019s roles and permissions are <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">tied directly to a specific team<!--TgQPHd|||[]--><\/strong>. When they switch teams, their permissions completely change.<!--TgQPHd|||[]--><\/div>\n<ul class=\"KsbFXc U6u95\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-ved=\"2ahUKEwjGq92F_t6WAxVgZ2wGHWppB_AQ-7AUegYIAAgQEAA\" data-hveid=\"CAAIEBAA\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">\n<li style=\"list-style-type: none;\">\n<ul class=\"KsbFXc U6u95\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-ved=\"2ahUKEwjGq92F_t6WAxVgZ2wGHWppB_AQ-7AUegYIAAgQEAA\" data-hveid=\"CAAIEBAA\" data-complete=\"true\" data-processed=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIEBAB\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">How it works:<!--TgQPHd|||[]--><\/strong> Spatie overrides its global nature and hooks directly into Jetstream&#8217;s <code class=\"KDcb0c\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 1px solid rgb(240, 242, 245);\">Team<!--TgQPHd|||[]--><\/code> model.<!--TgQPHd|||[]--><\/span><!--TgQPHd|||[]--><\/li>\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIEBAC\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Dynamic Scoping:<!--TgQPHd|||[]--><\/strong> A user can be an <code class=\"KDcb0c\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 1px solid rgb(240, 242, 245);\">Owner\/Admin<!--TgQPHd|||[]--><\/code> in <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Team A<!--TgQPHd|||[]--><\/strong>, but just a regular <code class=\"KDcb0c\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 1px solid rgb(240, 242, 245);\">Viewer<!--TgQPHd|||[]--><\/code> with restricted permissions in <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Team B<!--TgQPHd|||[]--><\/strong>.<!--TgQPHd|||[]--><\/span><!--TgQPHd|||[]--><\/li>\n<li class=\"Z1qcYe\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-hveid=\"CAAIEBAD\" data-complete=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><span class=\"iNqyIf\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Real-World Example:<!--TgQPHd|||[]--><\/strong> Like <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">GitHub<!--TgQPHd|||[]--><\/strong> or <strong class=\"rQesXe MPyX\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 700; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">Slack<!--TgQPHd|||[]--><\/strong>. You might be an administrator in your own company&#8217;s workspace (full access to billing, settings, and code repositories), but a restricted &#8220;Guest&#8221; or &#8220;Collaborator&#8221; in an external client&#8217;s workspace.<!--TgQPHd|||[]--><\/span><!--TgQPHd|||[]--><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><!--TgQPHd|||[]--><\/p>\n<div class=\"yhAwj\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-sfc-inited=\"2\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><!--TgQPHd|||[]--><\/div>\n<hr class=\"s6NV4e\" data-sfc-root=\"ep\" data-sfc-pl=\"|||[]\" data-complete=\"true\" data-processed=\"true\" data-sae=\"\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 32px 0px; text-decoration: none; border-bottom: 0px rgb(128, 128, 128);\" \/>\n<div class=\"yhAwj\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-sfc-inited=\"2\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\"><!--TgQPHd|||[]--><\/div>\n<div class=\"otQkpb\" role=\"heading\" aria-level=\"3\" data-animation-nesting=\"\" data-sfc-cp=\"\" data-wiz-attrbind=\"aria-level=r535o_3j\/fLk2Md\" data-sfc-root=\"ep\" data-complete=\"true\" data-processed=\"true\" data-sae=\"\" aria-owns=\"action-menu-parent-container\" data-copy-service-computed-style=\"font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 20px; font-weight: 600; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);\">\n<table class=\"c1\" data-animation-nesting=\"\" data-sae=\"\">\n<tbody class=\"c1\">\n<tr class=\"c1\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">\n<th class=\"c2\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Feature \/ Capability<!--TgQPHd|||[]--><\/th>\n<th class=\"c3\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Global Setup (Separate Worlds)<!--TgQPHd|||[]--><\/th>\n<th class=\"c4\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Team-Based Setup (Integrated)<!--TgQPHd|||[]--><\/th>\n<p><!--TgQPHd|||[]--><\/tr>\n<tr class=\"c1\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">\n<td class=\"c5\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\"><strong class=\"c6\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Permission Scope<!--TgQPHd|||[]--><\/strong><!--TgQPHd|||[]--><\/td>\n<td class=\"c7\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\"><strong class=\"c6\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Application-wide<!--TgQPHd|||[]--><\/strong>. Valid everywhere.<!--TgQPHd|||[]--><\/td>\n<td class=\"c8\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\"><strong class=\"c6\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Isolated<!--TgQPHd|||[]--><\/strong>. Only valid within the active team.<!--TgQPHd|||[]--><\/td>\n<p><!--TgQPHd|||[]--><\/tr>\n<tr class=\"c1\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">\n<td class=\"c9\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\"><strong class=\"c6\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Spatie Configuration<!--TgQPHd|||[]--><\/strong><!--TgQPHd|||[]--><\/td>\n<td class=\"c10\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">No extra config needed (Keep <code class=\"c11\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\">teams_permissions<!--TgQPHd|||[]--><\/code> false).<!--TgQPHd|||[]--><\/td>\n<td class=\"c12\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Requires setting <code class=\"c11\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\">'teams_permissions' =&gt; true<!--TgQPHd|||[]--><\/code> in Spatie&#8217;s config file.<!--TgQPHd|||[]--><\/td>\n<p><!--TgQPHd|||[]--><\/tr>\n<tr class=\"c1\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">\n<td class=\"c13\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\"><strong class=\"c6\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Database Structure<!--TgQPHd|||[]--><\/strong><!--TgQPHd|||[]--><\/td>\n<td class=\"c14\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Clean. Spatie links permissions directly to the <code class=\"c11\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\">user_id<!--TgQPHd|||[]--><\/code>.<!--TgQPHd|||[]--><\/td>\n<td class=\"c15\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Complex. Spatie links permissions to a compound key: <code class=\"c11\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\">user_id<!--TgQPHd|||[]--><\/code> + <code class=\"c11\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\">team_id<!--TgQPHd|||[]--><\/code>.<!--TgQPHd|||[]--><\/td>\n<p><!--TgQPHd|||[]--><\/tr>\n<tr class=\"c1\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">\n<td class=\"c16\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\"><strong class=\"c6\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Context Switching<!--TgQPHd|||[]--><\/strong><!--TgQPHd|||[]--><\/td>\n<td class=\"c17\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Seamless. No extra code required when users change teams.<!--TgQPHd|||[]--><\/td>\n<td class=\"c18\" data-sfc-cp=\"\" data-sfc-root=\"ep\" data-complete=\"true\">Requires running <code class=\"c11\" dir=\"ltr\" data-sfc-root=\"ep\" data-complete=\"true\" data-sae=\"\">setPermissionsTeamId($teamId)<!--TgQPHd|||[]--><\/code> whenever a user switches teams.<!--TgQPHd|||[]--><\/td>\n<p><!--TgQPHd|||[]--><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf0d Feature 1: Global Roles &amp; Permissions (Most Common) In this setup, your Jetstream Teams and your Spatie Roles exist in two completely separate worlds. How it works: A user has a specific role (e.g., Admin, Editor, Premium User) that applies to the entire application, regardless of which team they are currently viewing or managing. &hellip;<\/p>\n","protected":false},"author":1,"featured_media":423,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-422","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/posts\/422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=422"}],"version-history":[{"count":4,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/posts\/422\/revisions"}],"predecessor-version":[{"id":427,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/posts\/422\/revisions\/427"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=\/wp\/v2\/media\/423"}],"wp:attachment":[{"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tech.syneric.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}