{"id":174,"date":"2026-09-19T08:00:21","date_gmt":"2026-09-19T08:00:21","guid":{"rendered":"https:\/\/www.dobryakov.net\/blog\/174\/"},"modified":"2026-09-19T08:00:21","modified_gmt":"2026-09-19T08:00:21","slug":"ai-governance-access-control","status":"publish","type":"post","link":"https:\/\/www.dobryakov.net\/blog\/174\/","title":{"rendered":"Enterprise Access Control: Securing RAG with RBAC and ABAC"},"content":{"rendered":"<pre><code>\n# Enterprise Access Control: Securing RAG with RBAC and ABAC\n\nAn operations clerk asks the assistant: &quot;What were the terms on the last deal with this customer?&quot; The assistant searches the RAG index, finds a document from the legal department, and hands it over. The clerk has no access to that document in SharePoint. They didn&#x27;t hack anything; they just asked the bot, and the bot isn&#x27;t a rights subject. The retriever found the most relevant hit, the model summarized it. This is how AI produces **privileged leakage**: data the person has no access to at the source flows out through the assistant anyway.\n\n&lt;!--more--&gt;\n\nThis is a fundamental defect of naive RAG. Indexing collapses data at different access levels into a single vector index, and semantic search doesn&#x27;t know about permissions. The fix is an **identity plane**: RAG must return answers strictly within the rights the user actually has in the source systems \u2014 Confluence, Jira, SharePoint, PostgreSQL \u2014 and that must be provable.\n\n## The business goal\n\nA user gets from RAG exactly what they&#x27;re allowed to see in the source systems \u2014 no more. Three promises anchor the work:\n\n1. No answer contains data the asker lacks access to at the source.\n2. Access revocation at the source propagates into RAG within minutes, not days.\n3. When a regulator or auditor asks &quot;why did this employee see this,&quot; the answer lies in the permissions, not in the retriever&#x27;s luck.\n\n## What drives the work: threat and regulator\n\n- **Confused deputy**: the AI acts under its own identity with the full permissions of the index, rather than on behalf of the user. A classic internal-leak vector.\n- **OWASP LLM**: LLM02 (Sensitive Info Disclosure), LLM06 (Excessive Agency \u2014 when RAG tools reach into systems).\n- **GDPR \/ banking secrecy**: access to PII without a legal basis is a violation even inside the company.\n- **AI Act audit**: access to high-risk data must be logged and justified.\n\n## The architectural pattern: Identity-Aware Hybrid Filtering\n\nThe 2026 enterprise-architecture consensus: don&#x27;t choose between fast pre-filtering and precise authz \u2014 combine both.\n<\/code><\/pre>\n<p>JWT(user: groups, roles, tenant_id) \u2502 \u25bc [1] Pre-filter in the vector DB by ACL metadata (recall, cheap) \u2502  candidate chunks \u25bc [2] FGA post-check: CheckBulkPermissions against each chunk&#x27;s source document \u2502  permitted chunks          (precision, ReBAC\/ABAC) \u25bc [3] LLM  \u2192  [4] OPA post-filter on the answer (field masking, forbidden combinations)<\/p>\n<p><!--more--><\/p>\n<pre><code>\nThe pre-filter cheaply cuts out the bulk. The FGA service gives a precise check where the payload filter isn&#x27;t enough \u2014 complex relationships, ABAC context. The user&#x27;s rights penetrate **the retrieval itself**, rather than being layered onto the output after the fact.\n\n## Engineering stack\n\n- **Vector DB with payload filters**: Qdrant, Pinecone, PostgreSQL (pgvector).\n- **Identity**: OpenID Connect (OIDC), Keycloak; JWT with `groups`, `roles`, `tenant_id`.\n- **Fine-Grained Authorization (ReBAC\/ABAC)**: OpenFGA, SpiceDB, Cerbos, Auth0 FGA \u2014 `CheckBulkPermissions` in the retrieval path.\n- **Output-side policy**: OPA (Rego).\n- **Orchestration**: LlamaIndex \/ LangChain.\n\n## Implementation\n\n### Step 1. ACL as chunk metadata + version\n\nAt indexing time, each chunk&#x27;s payload gets a normalized ACL array and an `acl_version`. The version is the key to instant invalidation.\n<\/code><\/pre>\n<p>payload = { &quot;tenant_id&quot;: doc.tenant_id, &quot;allowed_groups&quot;: doc.acl_groups,     # from the source system &quot;source_doc_id&quot;: doc.id,              # for FGA post-check &quot;acl_version&quot;: doc.acl_version, }<\/p>\n<pre><code>\n### Step 2. Pre-filter from the JWT security context\n<\/code><\/pre>\n<p>flt = {&quot;must&quot;: [ {&quot;key&quot;: &quot;tenant_id&quot;,     &quot;match&quot;: {&quot;value&quot;: user.tenant_id}}, {&quot;key&quot;: &quot;allowed_groups&quot;,&quot;match&quot;: {&quot;any&quot;: user.groups}}, ]} candidates = qdrant.search(query_vec, query_filter=flt, limit=50)<\/p>\n<pre><code>\n### Step 3. FGA post-check against the source\n<\/code><\/pre>\n<p>allowed = fga.batch_check( user=f&quot;user:{user.id}&quot;, relation=&quot;viewer&quot;, objects=[f&quot;doc:{c.payload[&#x27;source_doc_id&#x27;]}&quot; for c in candidates], ) chunks = [c for c in candidates if allowed[c.payload[&quot;source_doc_id&quot;]]]<\/p>\n<pre><code>\n### Step 4. ACL sync \u2014 event-driven, not batch\n\nSubscribe to permission-change webhooks from the source systems; permission changes reconcile within minutes. Bump the `acl_version` \u2192 stale chunks are invalidated. A nightly batch sync is unacceptable here: a day with a revoked access still valid is a day of leakage.\n\n### Step 5. OPA at the output\n\nThe final answer and its citations pass through policy: masking of individual fields, banning dangerous combinations, redacting reference-link metadata.\n\n## Where it breaks\n\n- **ACL drift is the main risk.** Permissions change at the source, the index lags \u2192 you hand over what&#x27;s already forbidden. The only fix is event-driven sync plus real-time FGA checking. Pre-filtering against the index always lags by the sync delay.\n- **Leakage through aggregation.** Chunks permitted individually reveal something forbidden in aggregate. Neither pre-filter nor FGA sees this \u2014 it needs OPA\/business-rule logic on top.\n- **Citation metadata.** Content is filtered, but the source&#x27;s title or link in the answer reveals the mere existence of the document. Clean up citations too.\n- **FGA latency.** `CheckBulkPermissions` across dozens of chunks adds delay; balance pre-filter depth against post-check volume.\n- **ABAC context.** &quot;Access only during business hours \/ only for your own region \/ only with a business justification&quot; doesn&#x27;t fit cleanly into a payload \u2014 it moves into FGA\/OPA, adding complexity.\n\n## Standards and mapping\n\n- **ISO\/IEC 42001**: access controls for AI system data and systems.\n- **EU AI Act**: Art. 10 (data governance), access logging for high-risk.\n- **OWASP LLM**: LLM02, LLM06.\n- **NIST AI RMF**: Govern\/Map \u2014 data and access control.\n\n## Lab and artifact\n\nSet up Qdrant with payload ACLs and `acl_version`, OIDC via Keycloak, pre-filter by `tenant_id`+`groups`, an OpenFGA relationship model + `batch_check` in the retrieval path, webhook-based access-revocation sync, OPA at the output. Test: two users with different permissions ask the same question from the introduction \u2014 compare the results; revoke access and measure reconciliation time. **Artifact**: FGA model + rego policies + a &quot;role \u00d7 document \u2192 access&quot; test matrix + a sync-lag metric.\n\n## Maturity checklist\n\n- **L1**: a single index filtered by `tenant_id`.\n- **L2**: pre-filter by groups from the JWT + FGA post-check against the source, OPA at the output.\n- **L3**: event-driven ACL sync (minutes), protection against aggregation and citation leaks, ABAC context, an audit trail for every access.\n\n## Sources\n\n- [Document-Level RBAC for RAG (2026 guide, Truto)](https:\/\/truto.one\/blog\/how-to-maintain-document-level-rbac-in-enterprise-rag-pipelines\/)\n- [Fine-Grained Authorization for RAG with OpenFGA (Auth0)](https:\/\/auth0.com\/ai\/docs\/intro\/authorization-for-rag)\n- [The Right Approach to Authorization in RAG (Oso)](https:\/\/www.osohq.com\/post\/right-approach-to-authorization-in-rag)\n- [RAG with Access Control (Pinecone)](https:\/\/www.pinecone.io\/learn\/rag-access-control\/)\n\n---\n\nIf your RAG assistant returns an answer the asker could not have seen in the source system, you have built a privilege-escalation tool with a chat interface.\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Naive RAG collapses data at different access levels into one index. Here is how to build identity-aware filtering so an employee sees through the assistant exactly what they can access in the source systems.<\/p>\n","protected":false},"author":0,"featured_media":173,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[147,155],"tags":[158,156,160,159,46,157],"class_list":["post-174","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-governance","category-rag-security","tag-abac","tag-access-control","tag-enterprise-architecture","tag-openfga","tag-rag","tag-rbac"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.dobryakov.net\/blog\/174\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov&#039;s blog: management, development and testing\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Securing RAG with RBAC and ABAC: Enterprise Access Control\" \/>\n\t\t<meta property=\"og:description\" content=\"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.dobryakov.net\/blog\/174\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-19T08:00:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-19T08:00:21+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Securing RAG with RBAC and ABAC: Enterprise Access Control\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#blogposting\",\"name\":\"Securing RAG with RBAC and ABAC: Enterprise Access Control\",\"headline\":\"Enterprise Access Control: Securing RAG with RBAC and ABAC\",\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ai-governance-access-control.jpg\",\"width\":1200,\"height\":630,\"caption\":\"Enterprise Access Control: Securing RAG with RBAC and ABAC\"},\"datePublished\":\"2026-09-19T08:00:21+00:00\",\"dateModified\":\"2026-09-19T08:00:21+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#webpage\"},\"articleSection\":\"AI Governance, RAG Security, ABAC, access control, enterprise architecture, OpenFGA, RAG, RBAC\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-governance\\\/#listItem\",\"name\":\"AI Governance\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-governance\\\/#listItem\",\"position\":2,\"name\":\"AI Governance\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-governance\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#listItem\",\"name\":\"Enterprise Access Control: Securing RAG with RBAC and ABAC\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#listItem\",\"position\":3,\"name\":\"Enterprise Access Control: Securing RAG with RBAC and ABAC\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-governance\\\/#listItem\",\"name\":\"AI Governance\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#webpage\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/\",\"name\":\"Securing RAG with RBAC and ABAC: Enterprise Access Control\",\"description\":\"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ai-governance-access-control.jpg\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#mainImage\",\"width\":1200,\"height\":630,\"caption\":\"Enterprise Access Control: Securing RAG with RBAC and ABAC\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/174\\\/#mainImage\"},\"datePublished\":\"2026-09-19T08:00:21+00:00\",\"dateModified\":\"2026-09-19T08:00:21+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Securing RAG with RBAC and ABAC: Enterprise Access Control","description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.","canonical_url":"https:\/\/www.dobryakov.net\/blog\/174\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.dobryakov.net\/blog\/174\/#blogposting","name":"Securing RAG with RBAC and ABAC: Enterprise Access Control","headline":"Enterprise Access Control: Securing RAG with RBAC and ABAC","author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/09\/ai-governance-access-control.jpg","width":1200,"height":630,"caption":"Enterprise Access Control: Securing RAG with RBAC and ABAC"},"datePublished":"2026-09-19T08:00:21+00:00","dateModified":"2026-09-19T08:00:21+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/174\/#webpage"},"isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/174\/#webpage"},"articleSection":"AI Governance, RAG Security, ABAC, access control, enterprise architecture, OpenFGA, RAG, RBAC"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dobryakov.net\/blog\/174\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.dobryakov.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-governance\/#listItem","name":"AI Governance"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-governance\/#listItem","position":2,"name":"AI Governance","item":"https:\/\/www.dobryakov.net\/blog\/category\/ai-governance\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/174\/#listItem","name":"Enterprise Access Control: Securing RAG with RBAC and ABAC"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/174\/#listItem","position":3,"name":"Enterprise Access Control: Securing RAG with RBAC and ABAC","previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-governance\/#listItem","name":"AI Governance"}}]},{"@type":"Organization","@id":"https:\/\/www.dobryakov.net\/blog\/#organization","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","url":"https:\/\/www.dobryakov.net\/blog\/"},{"@type":"WebPage","@id":"https:\/\/www.dobryakov.net\/blog\/174\/#webpage","url":"https:\/\/www.dobryakov.net\/blog\/174\/","name":"Securing RAG with RBAC and ABAC: Enterprise Access Control","description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.dobryakov.net\/blog\/174\/#breadcrumblist"},"author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"creator":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/09\/ai-governance-access-control.jpg","@id":"https:\/\/www.dobryakov.net\/blog\/174\/#mainImage","width":1200,"height":630,"caption":"Enterprise Access Control: Securing RAG with RBAC and ABAC"},"primaryImageOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/174\/#mainImage"},"datePublished":"2026-09-19T08:00:21+00:00","dateModified":"2026-09-19T08:00:21+00:00"},{"@type":"WebSite","@id":"https:\/\/www.dobryakov.net\/blog\/#website","url":"https:\/\/www.dobryakov.net\/blog\/","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov's blog: management, development and testing","og:type":"article","og:title":"Securing RAG with RBAC and ABAC: Enterprise Access Control","og:description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.","og:url":"https:\/\/www.dobryakov.net\/blog\/174\/","article:published_time":"2026-09-19T08:00:21+00:00","article:modified_time":"2026-09-19T08:00:21+00:00","twitter:card":"summary_large_image","twitter:title":"Securing RAG with RBAC and ABAC: Enterprise Access Control","twitter:description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source."},"aioseo_meta_data":{"post_id":"174","title":"Securing RAG with RBAC and ABAC: Enterprise Access Control","description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.","keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":"Securing RAG with RBAC and ABAC: Enterprise Access Control","og_description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.","og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":"Securing RAG with RBAC and ABAC: Enterprise Access Control","twitter_description":"Build identity-aware RAG filtering: pre-filter by ACL metadata, post-check with FGA, and enforce OPA policies so users never see what they lack access to at the source.","schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-09-19 08:00:41","updated":"2026-09-19 08:00:41"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\/category\/ai-governance\/\" title=\"AI Governance\">AI Governance<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tEnterprise Access Control: Securing RAG with RBAC and ABAC\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.dobryakov.net\/blog"},{"label":"AI Governance","link":"https:\/\/www.dobryakov.net\/blog\/category\/ai-governance\/"},{"label":"Enterprise Access Control: Securing RAG with RBAC and ABAC","link":"https:\/\/www.dobryakov.net\/blog\/174\/"}],"_links":{"self":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/comments?post=174"}],"version-history":[{"count":0,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/174\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media\/173"}],"wp:attachment":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media?parent=174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/categories?post=174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/tags?post=174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}