CINXE.COM

<!doctype html> <html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-1.0.0 plugin-docs plugin-id-default docs-doc-id-concepts/authorization_concepts" data-has-hydrated="false"> <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v2.4.3"> <title data-rh="true">Authorization Concepts | Permit.io Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.permit.io/1.0.0/concepts/authorization_concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="1.0.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-1.0.0"><meta data-rh="true" name="docsearch:version" content="1.0.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-1.0.0"><meta data-rh="true" property="og:title" content="Authorization Concepts | Permit.io Documentation"><meta data-rh="true" name="description" content="Authorization(AuthZ) vs Authentication (AuthN)"><meta data-rh="true" property="og:description" content="Authorization(AuthZ) vs Authentication (AuthN)"><link data-rh="true" rel="icon" href="/logo/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.permit.io/1.0.0/concepts/authorization_concepts"><link data-rh="true" rel="alternate" href="https://docs.permit.io/1.0.0/concepts/authorization_concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.permit.io/1.0.0/concepts/authorization_concepts" hreflang="x-default"><link data-rh="true" rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"><link data-rh="true" href="https://cdn.jsdelivr.net/npm/remixicon@4.2.0/fonts/remixicon.css" rel="stylesheet"><link data-rh="true" rel="preconnect" href="https://MVBO9ANY91-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://www.googletagmanager.com"> <script async src="https://www.googletagmanager.com/gtag/js?id=G-S2W3HZX9EZ"></script> <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-S2W3HZX9EZ",{anonymize_ip:!0})</script> <link rel="search" type="application/opensearchdescription+xml" title="Permit.io Documentation" href="/opensearch.xml"> <script>!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3529378,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document)</script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/remixicon@4.2.0/fonts/remixicon.css"><link rel="stylesheet" href="/assets/css/styles.ecbeac4c.css"> <link rel="preload" href="/assets/js/runtime~main.d64cc98d.js" as="script"> <link rel="preload" href="/assets/js/main.1e418128.js" as="script"> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-S2W3HZX9EZ"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-S2W3HZX9EZ'); </script><script src="https://cdn.lr-in.com/LogRocket.min.js" crossorigin="anonymous"></script> <script>window.LogRocket && window.LogRocket.init('s0szi1/permitio-docs');</script></head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="announcementBar_mb4j" style="background-color:#6851ff;color:#FFFFFF" role="banner"><div class="announcementBarPlaceholder_vyr4"></div><div class="content_knG7 announcementBarContent_xLdY">If you like Permit, give us a ⭐️ on <a href="https://www.github.com/permitio/opal" target="_blank" rel="noopener noreferrer">GitHub</a> and follow us on <a href="https://www.twitter.com/permit_io" target="_blank" rel="noopener noreferrer">Twitter</a></div><button type="button" aria-label="Close" class="clean-btn close closeButton_CVFx announcementBarClose_gvF7"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"></a><div class="algolia-search searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a aria-current="page" class="navbar__link active" aria-haspopup="true" aria-expanded="false" role="button" href="/1.0.0/">1.0.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/">2.0.0</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/1.0.0/concepts/authorization_concepts">1.0.0</a></li></ul></div><a href="https://github.com/permitio" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link github-icon nav-icon" alt="twitter logo"></a><a href="https://twitter.com/permit_io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link twitter-icon nav-icon" alt="github logo"></a><a href="https://io.permit.io/docs-to-slack" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link slack-icon nav-icon" alt="slack logo"></a><div class="navbar__item dashboard"><a target="_blank" href="https://io.permit.io/QoPSfh">Go to dashboard</a></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg class="dark-theme-toggle" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.48522 1.68164C8.26441 2.82232 7.5013 4.44667 7.5013 6.24925C7.5013 9.70101 10.2996 12.4993 13.7513 12.4993C15.5539 12.4993 17.1782 11.7362 18.3189 10.5153C18.0524 14.8773 14.4304 18.3326 10.0013 18.3326C5.39893 18.3326 1.66797 14.6016 1.66797 9.99926C1.66797 5.57021 5.12321 1.94817 9.48522 1.68164Z" fill="#846358"></path></svg><svg class="light-theme-toggle" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_10761_10952)"><path d="M9.9987 15.0007C8.67262 15.0007 7.40085 14.4739 6.46316 13.5362C5.52548 12.5985 4.9987 11.3267 4.9987 10.0007C4.9987 8.67457 5.52548 7.4028 6.46316 6.46512C7.40085 5.52744 8.67262 5.00065 9.9987 5.00065C11.3248 5.00065 12.5966 5.52744 13.5342 6.46512C14.4719 7.4028 14.9987 8.67457 14.9987 10.0007C14.9987 11.3267 14.4719 12.5985 13.5342 13.5362C12.5966 14.4739 11.3248 15.0007 9.9987 15.0007ZM9.9987 13.334C10.8828 13.334 11.7306 12.9828 12.3557 12.3577C12.9808 11.7326 13.332 10.8847 13.332 10.0007C13.332 9.1166 12.9808 8.26875 12.3557 7.64363C11.7306 7.01851 10.8828 6.66732 9.9987 6.66732C9.11464 6.66732 8.2668 7.01851 7.64168 7.64363C7.01655 8.26875 6.66536 9.1166 6.66536 10.0007C6.66536 10.8847 7.01655 11.7326 7.64168 12.3577C8.2668 12.9828 9.11464 13.334 9.9987 13.334V13.334ZM9.16536 0.833984H10.832V3.33398H9.16536V0.833984ZM9.16536 16.6673H10.832V19.1673H9.16536V16.6673ZM2.92786 4.10815L4.1062 2.92982L5.8737 4.69732L4.69536 5.87565L2.92786 4.10898V4.10815ZM14.1237 15.304L15.302 14.1257L17.0695 15.8932L15.8912 17.0715L14.1237 15.304ZM15.8912 2.92898L17.0695 4.10815L15.302 5.87565L14.1237 4.69732L15.8912 2.92982V2.92898ZM4.69536 14.1257L5.8737 15.304L4.1062 17.0715L2.92786 15.8932L4.69536 14.1257V14.1257ZM19.1654 9.16732V10.834H16.6654V9.16732H19.1654ZM3.33203 9.16732V10.834H0.832031V9.16732H3.33203Z" fill="#FFB381"></path></g><defs><clipPath id="clip0_10761_10952"><rect width="20" height="20" fill="white"></rect></clipPath></defs></svg></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><a href="/"></a><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG menuWithAnnouncementBar_GW3s"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/1.0.0/">WELCOME</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">Get Started</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/tutorials/quickstart">Quickstart</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/1.0.0/tutorials/Introduction/what-is-permit">Introduction</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/1.0.0/tutorials/Onboarding/lets-begin">Onboarding</a></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">Features</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/features/projects-and-env">Projects &amp; Environments</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/features/policy-editor">Policy Editor</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/features/user-management">User Management</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/1.0.0/features/Audit Logs/types">Audit Logs</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/features/coming-soon">Coming Soon</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/1.0.0/concepts/authorization_concepts">Concepts</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/1.0.0/concepts/authorization_concepts">Authorization Concepts</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/concepts/control_plane_and_data_plane">Control &amp; Data planes</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/concepts/multi-tenancy">Multi-Tenancy</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/concepts/pdp">PDP</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">Reference</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/1.0.0/reference/SDKs/Dotnet/quickstart_dotnet">SDKs</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/reference/api_reference">API Reference</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/1.0.0/reference/api_with_cli">Call API with CLI</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/1.0.0/security/Connectivity">Security</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/1.0.0/faq">FAQ</a></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_z5aJ"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role="alert"><div>This is documentation for <!-- -->Permit.io Documentation<!-- --> <b>1.0.0</b>, which is no longer actively maintained.</div><div class="margin-top--md">For up-to-date documentation, see the <b><a href="/">latest version</a></b> (<!-- -->2.0.0<!-- -->).</div></div><div class="docItemContainer_c0TR"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Concepts</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Authorization Concepts</span><meta itemprop="position" content="2"></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 1.0.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Authorization Concepts</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authorizationauthz-vs-authentication-authn">Authorization(AuthZ) vs Authentication (AuthN)<a href="#authorizationauthz-vs-authentication-authn" class="hash-link" aria-label="Direct link to Authorization(AuthZ) vs Authentication (AuthN)" title="Direct link to Authorization(AuthZ) vs Authentication (AuthN)">​</a></h3><p>While closely related, authorization and authentication are different. To simplify with a metaphor - imagine a person is about to enter your home:</p><p><strong>Authentication</strong> will deal with identifying who is at the door and deciding whether they may enter or not.</p><p>The <strong>authorization</strong> will start immediately as soon as the person is in your house. It will deal with the person&#x27;s permission once they enter - can the person open the fridge? May they sleep in your bed? Can the person read your diary?</p><p>To conclude</p><ul><li>Authentication (AuthN) - Who is the user</li><li>Authorization (AuthZ) - What is the user allowed to do</li></ul><p>Dive deeper with this video</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="decoupling-your-policy-from-your-code">Decoupling your policy from your code<a href="#decoupling-your-policy-from-your-code" class="hash-link" aria-label="Direct link to Decoupling your policy from your code" title="Direct link to Decoupling your policy from your code">​</a></h3><p>One of the key challenges of implementing authorization right is to support the ever changing needs and the growing complexity from authorization as the project requirements evolves. Authorization complexity can be broken into two main parts - architectural complexities and feature or model complexities.</p><p><strong>Architectural complexity</strong></p><p>Naturally, your code evolves as you are adding additional microservices and logic. As a result, additional authorization logic is added ad-hoc to solve specific cases, which eventually leads to inconsistencies in authorizations throughout the system.</p><p><strong>Feature and model complexity</strong></p><p>Authorization requirements starts with - <!-- -->&quot;<!-- -->We only need an &#x27;Admin&#x27; and a &#x27;Not Admin&#x27; roles<!-- -->&quot;<!-- -->, just to quickly discover that additional roles, models, and rules are required as requirements arrive from customers, colleagues, security, compliance, and partners. Soon RBAC (role based access control) is replaced by ABAC (attribute based access control), GBAC (graph based access control), and/or hybrid models; and more and more access-control features are built on top.</p><p><strong>Decoupling Policy and Code in general</strong></p><p>To avoid being encumbered by said complexity, we can use the best practice of decoupling policy from code. Ideally, we use a separate microservice to provide authorization to the rest of the system. Open-source solutions like OPA, or Open Policy Agent and its policy language Rego are an excellent baseline for creating such a microservice. Still, it requires maintenance work, especially around connecting the microservice to the application, its policy sources, the data it needs, and the access-control interfaces we need to build on top.</p><p><strong>Decoupling Policy and Code with Permit.io</strong></p><p>With Permit.io, you get the best in class authorization solution ready-made:</p><ul><li>A microservice that is based on OPA and OPAL.</li><li>A set of SDKs per your language of choice to work with.</li><li>A cloud service to manage it all.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="decoupling-authorization-data-from-application-data">Decoupling Authorization data from application data<a href="#decoupling-authorization-data-from-application-data" class="hash-link" aria-label="Direct link to Decoupling Authorization data from application data" title="Direct link to Decoupling Authorization data from application data">​</a></h3><p>While the information for running a product overlaps with the data used to authorize it&#x27;s access, the two are different. First, the authorization doesn&#x27;t require all the data used by the application. Second, the data relevant for authorization often extends to additional data sources that are not the application&#x27;s core, i.e., billing, CRM, identity providers.</p><p>With Permit.io, you get a handful 3rd party data integrations from various sources and a pipeline based on OPAL.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/1.0.0/features/coming-soon"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Coming Soon</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/1.0.0/concepts/control_plane_and_data_plane"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Control &amp; Data planes</div></a></nav></div></div><div class="col col--3"><div class="toc-wrapper"><h2>Contents</h2><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#authorizationauthz-vs-authentication-authn" class="table-of-contents__link toc-highlight">Authorization(AuthZ) vs Authentication (AuthN)</a></li><li><a href="#decoupling-your-policy-from-your-code" class="table-of-contents__link toc-highlight">Decoupling your policy from your code</a></li><li><a href="#decoupling-authorization-data-from-application-data" class="table-of-contents__link toc-highlight">Decoupling Authorization data from application data</a></li></ul></div></div></div></div></div></main></div></div></div> <script src="/assets/js/runtime~main.d64cc98d.js"></script> <script src="/assets/js/main.1e418128.js"></script> <script> function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } var cookie = getCookie('_lr_id'); if (cookie && window.LogRocket){ lr_id = JSON.parse(atob(decodeURIComponent(escape(cookie)))); window.LogRocket.identify(lr_id.email, {name:lr_id.fullName, email:lr_id.email}); } </script></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10