[{"data":1,"prerenderedAt":913},["ShallowReactive",2],{"navigation":3,"\u002Fenterprise\u002Fentity-memberships":189,"\u002Fenterprise\u002Fentity-memberships-surround":908},[4,34,60,116,137,153],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":33},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,18,23,28],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":5,"path":16,"stem":17,"icon":6},"\u002Fgetting-started\u002Fgetting-started","1.getting-started\u002F2.getting-started",{"title":19,"path":20,"stem":21,"icon":22},"Choosing a Preset","\u002Fgetting-started\u002Fchoosing-a-preset","1.getting-started\u002F3.choosing-a-preset","i-lucide-git-branch",{"title":24,"path":25,"stem":26,"icon":27},"Deployment","\u002Fgetting-started\u002Fdeployment","1.getting-started\u002F4.deployment","i-lucide-cloud",{"title":29,"path":30,"stem":31,"icon":32},"Background Maintenance","\u002Fgetting-started\u002Fbackground-maintenance","1.getting-started\u002F5.background-maintenance","i-lucide-timer-reset",false,{"title":35,"icon":36,"path":37,"stem":38,"children":39,"page":33},"Build","i-lucide-wrench","\u002Fbuild","2.build",[40,45,50,55],{"title":41,"path":42,"stem":43,"icon":44},"Routers & Prefixes","\u002Fbuild\u002Frouters-and-prefixes","2.build\u002F1.routers-and-prefixes","i-lucide-route",{"title":46,"path":47,"stem":48,"icon":49},"Configuration","\u002Fbuild\u002Fconfiguration","2.build\u002F2.configuration","i-lucide-settings",{"title":51,"path":52,"stem":53,"icon":54},"Authorization Dependencies","\u002Fbuild\u002Fauthorization-dependencies","2.build\u002F3.authorization-dependencies","i-lucide-shield-check",{"title":56,"path":57,"stem":58,"icon":59},"Command Line","\u002Fbuild\u002Fcli","2.build\u002F4.cli","i-lucide-terminal",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":33},"Auth","i-lucide-lock","\u002Fauth","3.auth",[66,71,76,81,86,91,96,101,106,111],{"title":67,"path":68,"stem":69,"icon":70},"OAuth & Social Login","\u002Fauth\u002Foauth-and-social-login","3.auth\u002F1.oauth-and-social-login","i-lucide-log-in",{"title":72,"path":73,"stem":74,"icon":75},"Multi-Frontend Support","\u002Fauth\u002Fmulti-frontend","3.auth\u002F10.multi-frontend","i-lucide-layout-grid",{"title":77,"path":78,"stem":79,"icon":80},"Sessions & Audit","\u002Fauth\u002Fsessions-and-audit","3.auth\u002F2.sessions-and-audit","i-lucide-monitor-smartphone",{"title":82,"path":83,"stem":84,"icon":85},"Passwordless & Messaging","\u002Fauth\u002Fpasswordless-and-messaging","3.auth\u002F3.passwordless-and-messaging","i-lucide-mail",{"title":87,"path":88,"stem":89,"icon":90},"JWT Tokens","\u002Fauth\u002Fjwt-tokens","3.auth\u002F4.jwt-tokens","i-lucide-key-round",{"title":92,"path":93,"stem":94,"icon":95},"User Management API","\u002Fauth\u002Fuser-management-api","3.auth\u002F5.user-management-api","i-lucide-users",{"title":97,"path":98,"stem":99,"icon":100},"User Invitations","\u002Fauth\u002Fuser-invitations","3.auth\u002F6.user-invitations","i-lucide-send",{"title":102,"path":103,"stem":104,"icon":105},"Roles & Permissions","\u002Fauth\u002Froles-and-permissions","3.auth\u002F7.roles-and-permissions","i-lucide-shield",{"title":107,"path":108,"stem":109,"icon":110},"ABAC","\u002Fauth\u002Fabac","3.auth\u002F8.abac","i-lucide-filter",{"title":112,"path":113,"stem":114,"icon":115},"User Status","\u002Fauth\u002Fuser-status","3.auth\u002F9.user-status","i-lucide-user-cog",{"title":117,"icon":118,"path":119,"stem":120,"children":121,"page":33},"Enterprise","i-lucide-building-2","\u002Fenterprise","4.enterprise",[122,127,132],{"title":123,"path":124,"stem":125,"icon":126},"Core Authorization Concepts","\u002Fenterprise\u002Fcore-authorization-concepts","4.enterprise\u002F1.core-authorization-concepts","i-lucide-network",{"title":128,"path":129,"stem":130,"icon":131},"Entities","\u002Fenterprise\u002Fentities","4.enterprise\u002F2.entities","i-lucide-folder-tree",{"title":133,"path":134,"stem":135,"icon":136},"Entity Memberships","\u002Fenterprise\u002Fentity-memberships","4.enterprise\u002F3.entity-memberships","i-lucide-user-plus",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":33},"Integrations","i-lucide-plug","\u002Fintegrations","5.integrations",[143,148],{"title":144,"path":145,"stem":146,"icon":147},"API Keys","\u002Fintegrations\u002Fapi-keys","5.integrations\u002F1.api-keys","i-lucide-key",{"title":149,"path":150,"stem":151,"icon":152},"OutlabsAuth UI","\u002Fintegrations\u002Foutlabsauth-ui","5.integrations\u002F2.outlabsauth-ui","i-lucide-layout-dashboard",{"title":154,"icon":155,"path":156,"stem":157,"children":158,"page":33},"Reference","i-lucide-book-marked","\u002Freference","6.reference",[159,164,169,174,179,184],{"title":160,"path":161,"stem":162,"icon":163},"Data Models","\u002Freference\u002Fdata-models","6.reference\u002F1.data-models","i-lucide-database",{"title":165,"path":166,"stem":167,"icon":168},"Activity Tracking","\u002Freference\u002Factivity-tracking","6.reference\u002F2.activity-tracking","i-lucide-activity",{"title":170,"path":171,"stem":172,"icon":173},"Testing","\u002Freference\u002Ftesting","6.reference\u002F3.testing","i-lucide-flask-conical",{"title":175,"path":176,"stem":177,"icon":178},"Observability","\u002Freference\u002Fobservability","6.reference\u002F4.observability","i-lucide-eye",{"title":180,"path":181,"stem":182,"icon":183},"Metrics Reference","\u002Freference\u002Fmetrics-reference","6.reference\u002F5.metrics-reference","i-lucide-chart-bar",{"title":185,"path":186,"stem":187,"icon":188},"Log Events Reference","\u002Freference\u002Flog-events-reference","6.reference\u002F6.log-events-reference","i-lucide-scroll-text",{"id":190,"title":133,"body":191,"description":901,"extension":902,"links":903,"meta":904,"navigation":905,"path":134,"seo":906,"stem":135,"__hash__":907},"docs\u002F4.enterprise\u002F3.entity-memberships.md",{"type":192,"value":193,"toc":894},"minimark",[194,201,217,248,251,254,259,276,344,366,377,383,385,393,582,594,605,619,621,625,859,861,865,890],[195,196,197],"note",{},[198,199,200],"p",{},"EnterpriseRBAC membership lifecycle.",[198,202,203,204,208,209,212,213,216],{},"A membership connects ",[205,206,207],"strong",{},"one user",", ",[205,210,211],{},"one entity",", and ",[205,214,215],{},"zero or more roles",".\nThat is the primary way EnterpriseRBAC grants entity-scoped access. Users can\nbelong to many entities; each membership has its own status and validity window.",[218,219,224],"pre",{"className":220,"code":221,"language":222,"meta":223,"style":223},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from outlabs_auth.routers import get_memberships_router\n\napp.include_router(get_memberships_router(auth, prefix=\"\u002Fv1\u002Fmemberships\"))\n","python","",[225,226,227,235,242],"code",{"__ignoreMap":223},[228,229,232],"span",{"class":230,"line":231},"line",1,[228,233,234],{},"from outlabs_auth.routers import get_memberships_router\n",[228,236,238],{"class":230,"line":237},2,[228,239,241],{"emptyLinePlaceholder":240},true,"\n",[228,243,245],{"class":230,"line":244},3,[228,246,247],{},"app.include_router(get_memberships_router(auth, prefix=\"\u002Fv1\u002Fmemberships\"))\n",[198,249,250],{},"SimpleRBAC has no memberships — use direct roles on the users router instead.",[252,253],"hr",{},[255,256,258],"h2",{"id":257},"lifecycle","Lifecycle",[198,260,261,262,208,265,208,268,271,272,275],{},"Stored fields include ",[225,263,264],{},"status",[225,266,267],{},"valid_from",[225,269,270],{},"valid_until",", join\u002Frevoke\nmetadata, and ",[225,273,274],{},"revocation_reason",".",[277,278,279,292],"table",{},[280,281,282],"thead",{},[283,284,285,289],"tr",{},[286,287,288],"th",{},"Status",[286,290,291],{},"Grants permissions?",[293,294,295,307,321,334],"tbody",{},[283,296,297,304],{},[298,299,300,303],"td",{},[225,301,302],{},"active"," (and inside validity window)",[298,305,306],{},"Yes",[283,308,309,318],{},[298,310,311,314,315],{},[225,312,313],{},"suspended"," \u002F ",[225,316,317],{},"revoked",[298,319,320],{},"No",[283,322,323,331],{},[298,324,325,314,328],{},[225,326,327],{},"expired",[225,329,330],{},"pending",[298,332,333],{},"Computed: outside window \u002F not yet started — no",[283,335,336,341],{},[298,337,338],{},[225,339,340],{},"rejected",[298,342,343],{},"Reserved for future approval flows",[198,345,346,350,351,356,357,359,360,362,363,365],{},[205,347,348],{},[225,349,264],{}," is what you store. ",[205,352,353],{},[225,354,355],{},"effective_status"," applies the validity\nwindow at read\u002Fcheck time (e.g. stored ",[225,358,302],{}," + ",[225,361,270],{}," yesterday →\n",[225,364,327],{},").",[198,367,368,369,372,373,376],{},"A membership grants permissions only when ",[225,370,371],{},"status == active"," ",[205,374,375],{},"and"," now is\ninside the validity window.",[198,378,379,382],{},[205,380,381],{},"Limitation:"," timing is membership-wide — you cannot give different roles on\nthe same membership different windows.",[252,384],{},[255,386,388,389,392],{"id":387},"http-api-v1memberships","HTTP API (",[225,390,391],{},"\u002Fv1\u002Fmemberships",")",[277,394,395,411],{},[280,396,397],{},[283,398,399,402,405,408],{},[286,400,401],{},"Method",[286,403,404],{},"Path",[286,406,407],{},"Permission",[286,409,410],{},"Notes",[293,412,413,434,477,496,514,531,555],{},[283,414,415,420,425,428],{},[298,416,417],{},[225,418,419],{},"GET",[298,421,422],{},[225,423,424],{},"\u002Fme",[298,426,427],{},"Authenticated",[298,429,430,431],{},"Own memberships; ",[225,432,433],{},"include_inactive",[283,435,436,441,446,452],{},[298,437,438],{},[225,439,440],{},"POST",[298,442,443],{},[225,444,445],{},"\u002F",[298,447,448,449],{},"Tree ",[225,450,451],{},"membership:create",[298,453,454,455,208,458,208,461,464,465,467,468,470,471,473,474],{},"Add member. Body: ",[225,456,457],{},"user_id",[225,459,460],{},"entity_id",[225,462,463],{},"role_ids",", optional ",[225,466,264],{}," (",[225,469,302],{},"|",[225,472,313],{},"), validity, ",[225,475,476],{},"reason",[283,478,479,483,488,493],{},[298,480,481],{},[225,482,419],{},[298,484,485],{},[225,486,487],{},"\u002Fentity\u002F{entity_id}",[298,489,448,490],{},[225,491,492],{},"membership:read",[298,494,495],{},"Members of one entity (paginated)",[283,497,498,502,507,511],{},[298,499,500],{},[225,501,419],{},[298,503,504],{},[225,505,506],{},"\u002Fentity\u002F{entity_id}\u002Fdetails",[298,508,448,509],{},[225,510,492],{},[298,512,513],{},"Same + user\u002Frole summaries",[283,515,516,520,525,528],{},[298,517,518],{},[225,519,419],{},[298,521,522],{},[225,523,524],{},"\u002Fuser\u002F{user_id}",[298,526,527],{},"Tree \u002F scoped read",[298,529,530],{},"User’s memberships (access reviews)",[283,532,533,538,543,548],{},[298,534,535],{},[225,536,537],{},"PATCH",[298,539,540],{},[225,541,542],{},"\u002F{entity_id}\u002F{user_id}",[298,544,448,545],{},[225,546,547],{},"membership:update",[298,549,550,551,554],{},"Replace roles, suspend\u002Freactivate, set\u002Fclear windows (",[225,552,553],{},"null"," clears)",[283,556,557,562,566,571],{},[298,558,559],{},[225,560,561],{},"DELETE",[298,563,564],{},[225,565,542],{},[298,567,448,568],{},[225,569,570],{},"membership:delete",[298,572,573,574,576,577,372,579],{},"Soft revoke → ",[225,575,317],{},"; reactivate later with ",[225,578,537],{},[225,580,581],{},"status=active",[198,583,584,585,208,588,208,591,593],{},"List\u002Fdetail queries: ",[225,586,587],{},"page",[225,589,590],{},"limit",[225,592,433],{}," (default false).",[198,595,596,597,600,601,275],{},"Roles on create\u002Fupdate are validated against the entity context. Role pickers:\n",[225,598,599],{},"GET \u002Fv1\u002Froles\u002Fentity\u002F{entity_id}"," — ",[602,603,604],"a",{"href":103},"25",[198,606,607,608,611,612,615,616,275],{},"Convenience read on the entities router: ",[225,609,610],{},"GET \u002Fv1\u002Fentities\u002F{id}\u002Fmembers"," —\n",[602,613,614],{"href":129},"51",". History\u002Forphans on users router — ",[602,617,618],{"href":93},"23",[252,620],{},[255,622,624],{"id":623},"response-shape-typical","Response shape (typical)",[218,626,630],{"className":627,"code":628,"language":629,"meta":223,"style":223},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": \"uuid\",\n  \"entity_id\": \"uuid\",\n  \"user_id\": \"uuid\",\n  \"role_ids\": [\"uuid\"],\n  \"status\": \"active\",\n  \"effective_status\": \"expired\",\n  \"joined_at\": \"2026-03-16T09:00:00Z\",\n  \"valid_from\": \"2026-03-16T09:00:00Z\",\n  \"valid_until\": \"2026-03-23T09:00:00Z\",\n  \"is_currently_valid\": false,\n  \"can_grant_permissions\": false\n}\n","json",[225,631,632,638,665,683,702,725,744,763,784,803,823,838,853],{"__ignoreMap":223},[228,633,634],{"class":230,"line":231},[228,635,637],{"class":636},"sMK4o","{\n",[228,639,640,643,647,650,653,656,660,662],{"class":230,"line":237},[228,641,642],{"class":636},"  \"",[228,644,646],{"class":645},"spNyl","id",[228,648,649],{"class":636},"\"",[228,651,652],{"class":636},":",[228,654,655],{"class":636}," \"",[228,657,659],{"class":658},"sfazB","uuid",[228,661,649],{"class":636},[228,663,664],{"class":636},",\n",[228,666,667,669,671,673,675,677,679,681],{"class":230,"line":244},[228,668,642],{"class":636},[228,670,460],{"class":645},[228,672,649],{"class":636},[228,674,652],{"class":636},[228,676,655],{"class":636},[228,678,659],{"class":658},[228,680,649],{"class":636},[228,682,664],{"class":636},[228,684,686,688,690,692,694,696,698,700],{"class":230,"line":685},4,[228,687,642],{"class":636},[228,689,457],{"class":645},[228,691,649],{"class":636},[228,693,652],{"class":636},[228,695,655],{"class":636},[228,697,659],{"class":658},[228,699,649],{"class":636},[228,701,664],{"class":636},[228,703,705,707,709,711,713,716,718,720,722],{"class":230,"line":704},5,[228,706,642],{"class":636},[228,708,463],{"class":645},[228,710,649],{"class":636},[228,712,652],{"class":636},[228,714,715],{"class":636}," [",[228,717,649],{"class":636},[228,719,659],{"class":658},[228,721,649],{"class":636},[228,723,724],{"class":636},"],\n",[228,726,728,730,732,734,736,738,740,742],{"class":230,"line":727},6,[228,729,642],{"class":636},[228,731,264],{"class":645},[228,733,649],{"class":636},[228,735,652],{"class":636},[228,737,655],{"class":636},[228,739,302],{"class":658},[228,741,649],{"class":636},[228,743,664],{"class":636},[228,745,747,749,751,753,755,757,759,761],{"class":230,"line":746},7,[228,748,642],{"class":636},[228,750,355],{"class":645},[228,752,649],{"class":636},[228,754,652],{"class":636},[228,756,655],{"class":636},[228,758,327],{"class":658},[228,760,649],{"class":636},[228,762,664],{"class":636},[228,764,766,768,771,773,775,777,780,782],{"class":230,"line":765},8,[228,767,642],{"class":636},[228,769,770],{"class":645},"joined_at",[228,772,649],{"class":636},[228,774,652],{"class":636},[228,776,655],{"class":636},[228,778,779],{"class":658},"2026-03-16T09:00:00Z",[228,781,649],{"class":636},[228,783,664],{"class":636},[228,785,787,789,791,793,795,797,799,801],{"class":230,"line":786},9,[228,788,642],{"class":636},[228,790,267],{"class":645},[228,792,649],{"class":636},[228,794,652],{"class":636},[228,796,655],{"class":636},[228,798,779],{"class":658},[228,800,649],{"class":636},[228,802,664],{"class":636},[228,804,806,808,810,812,814,816,819,821],{"class":230,"line":805},10,[228,807,642],{"class":636},[228,809,270],{"class":645},[228,811,649],{"class":636},[228,813,652],{"class":636},[228,815,655],{"class":636},[228,817,818],{"class":658},"2026-03-23T09:00:00Z",[228,820,649],{"class":636},[228,822,664],{"class":636},[228,824,826,828,831,833,835],{"class":230,"line":825},11,[228,827,642],{"class":636},[228,829,830],{"class":645},"is_currently_valid",[228,832,649],{"class":636},[228,834,652],{"class":636},[228,836,837],{"class":636}," false,\n",[228,839,841,843,846,848,850],{"class":230,"line":840},12,[228,842,642],{"class":636},[228,844,845],{"class":645},"can_grant_permissions",[228,847,649],{"class":636},[228,849,652],{"class":636},[228,851,852],{"class":636}," false\n",[228,854,856],{"class":230,"line":855},13,[228,857,858],{"class":636},"}\n",[252,860],{},[255,862,864],{"id":863},"related","Related",[866,867,868,873,877,881,885],"ul",{},[869,870,871],"li",{},[602,872,128],{"href":129},[869,874,875],{},[602,876,102],{"href":103},[869,878,879],{},[602,880,92],{"href":93},[869,882,883],{},[602,884,19],{"href":20},[869,886,887,888],{},"Mount catalog: ",[602,889,41],{"href":42},[891,892,893],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":223,"searchDepth":231,"depth":237,"links":895},[896,897,899,900],{"id":257,"depth":237,"text":258},{"id":387,"depth":237,"text":898},"HTTP API (\u002Fv1\u002Fmemberships)",{"id":623,"depth":237,"text":624},{"id":863,"depth":237,"text":864},"Enterprise membership lifecycle.","md",null,{},{"icon":136},{"title":133,"description":901},"XrlXcNVRbSNfEdX54y8VJ6kIUoZqfA1MxxJrPdiWSL0",[909,911],{"title":128,"path":129,"stem":130,"description":910,"icon":131,"children":-1},"Enterprise org tree CRUD, move, children, path.",{"title":144,"path":145,"stem":146,"description":912,"icon":147,"children":-1},"Personal and system integration keys for host apps.",1787472745731]