blob: 8e1d1ff74942a5dd94abcdf2b5c869905eb581b0 [file]
<!doctype html>
<html lang="ms" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-syntax-for-models" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Syntax for Models | Casbin</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://casbin.org/ms/docs/syntax-for-models"><meta data-rh="true" property="og:locale" content="ms"><meta data-rh="true" property="og:locale:alternate" content="en"><meta data-rh="true" property="og:locale:alternate" content="zh"><meta data-rh="true" property="og:locale:alternate" content="ko"><meta data-rh="true" property="og:locale:alternate" content="ru"><meta data-rh="true" property="og:locale:alternate" content="fr"><meta data-rh="true" property="og:locale:alternate" content="de"><meta data-rh="true" property="og:locale:alternate" content="ja"><meta data-rh="true" property="og:locale:alternate" content="es"><meta data-rh="true" property="og:locale:alternate" content="pt"><meta data-rh="true" property="og:locale:alternate" content="uk"><meta data-rh="true" property="og:locale:alternate" content="th"><meta data-rh="true" property="og:locale:alternate" content="ar"><meta data-rh="true" property="og:locale:alternate" content="id"><meta data-rh="true" property="og:locale:alternate" content="vi"><meta data-rh="true" property="og:locale:alternate" content="it"><meta data-rh="true" property="og:locale:alternate" content="tr"><meta data-rh="true" name="docusaurus_locale" content="ms"><meta data-rh="true" name="docsearch:language" content="ms"><meta data-rh="true" name="Casbin" content="An authorization library that supports access control models like ACL, RBAC, ABAC, ReBAC, PBAC, OrBAC, BLP, Biba, LBAC, UCON for Golang, Java, C/C++, Node.js, Javascript, PHP, Laravel, Python, .NET (C#), Delphi, Rust, Ruby, Swift (Objective-C), Lua (OpenResty), Dart (Flutter) and Elixir"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Syntax for Models | Casbin"><meta data-rh="true" name="description" content="Sintaks untuk Model"><meta data-rh="true" property="og:description" content="Sintaks untuk Model"><meta data-rh="true" name="keywords" content="syntax"><link data-rh="true" rel="icon" href="/ms/img/favicon.png"><link data-rh="true" rel="canonical" href="https://casbin.org/ms/docs/syntax-for-models"><link data-rh="true" rel="alternate" href="https://casbin.org/docs/syntax-for-models" hreflang="en"><link data-rh="true" rel="alternate" href="https://casbin.org/zh/docs/syntax-for-models" hreflang="zh"><link data-rh="true" rel="alternate" href="https://casbin.org/ko/docs/syntax-for-models" hreflang="ko"><link data-rh="true" rel="alternate" href="https://casbin.org/ru/docs/syntax-for-models" hreflang="ru"><link data-rh="true" rel="alternate" href="https://casbin.org/fr/docs/syntax-for-models" hreflang="fr"><link data-rh="true" rel="alternate" href="https://casbin.org/de/docs/syntax-for-models" hreflang="de"><link data-rh="true" rel="alternate" href="https://casbin.org/ja/docs/syntax-for-models" hreflang="ja"><link data-rh="true" rel="alternate" href="https://casbin.org/es/docs/syntax-for-models" hreflang="es"><link data-rh="true" rel="alternate" href="https://casbin.org/pt/docs/syntax-for-models" hreflang="pt"><link data-rh="true" rel="alternate" href="https://casbin.org/uk/docs/syntax-for-models" hreflang="uk"><link data-rh="true" rel="alternate" href="https://casbin.org/th/docs/syntax-for-models" hreflang="th"><link data-rh="true" rel="alternate" href="https://casbin.org/ar/docs/syntax-for-models" hreflang="ar"><link data-rh="true" rel="alternate" href="https://casbin.org/id/docs/syntax-for-models" hreflang="id"><link data-rh="true" rel="alternate" href="https://casbin.org/vi/docs/syntax-for-models" hreflang="vi"><link data-rh="true" rel="alternate" href="https://casbin.org/it/docs/syntax-for-models" hreflang="it"><link data-rh="true" rel="alternate" href="https://casbin.org/ms/docs/syntax-for-models" hreflang="ms"><link data-rh="true" rel="alternate" href="https://casbin.org/tr/docs/syntax-for-models" hreflang="tr"><link data-rh="true" rel="alternate" href="https://casbin.org/docs/syntax-for-models" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://6NBEV8TOFK-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Model","item":"https://casbin.org/ms/docs/category/model"},{"@type":"ListItem","position":2,"name":"Syntax for Models","item":"https://casbin.org/ms/docs/syntax-for-models"}]}</script><link rel="alternate" type="application/rss+xml" href="/ms/blog/rss.xml" title="Casbin RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/ms/blog/atom.xml" title="Casbin Atom Feed">
<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-8S2TKCJ27X"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-8S2TKCJ27X",{})</script>
<link rel="search" type="application/opensearchdescription+xml" title="Casbin" href="/ms/opensearch.xml">
<script src="/js/hotjar.js" async></script>
<script src="/js/probe.js" async></script>
<script src="/js/clarity.js" async></script><link rel="stylesheet" href="/ms/assets/css/styles.4c41a9f3.css">
<script src="/ms/assets/js/runtime~main.dbd29324.js" defer="defer"></script>
<script src="/ms/assets/js/main.d5192bc1.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Langkau ke kandungan utama"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Langkau ke kandungan utama</a></div><nav aria-label="Utama" class="theme-layout-navbar navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Togol bar navigasi" 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="/ms/"><div class="navbar__logo"><img src="https://cdn.casbin.org/img/casbin_logo_1024x256.png" alt="Casbin Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="https://cdn.casbin.org/img/casbin_logo_1024x256.png" alt="Casbin Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate"></b></a><div class="navbar__item dropdown dropdown--hoverable"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/ms/docs/overview">Dokumen</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/ms/docs/get-started">Mulakan</a></li><li><a class="dropdown__link" href="/ms/docs/category/model">Model</a></li><li><a class="dropdown__link" href="/ms/docs/category/storage">Penyimpanan</a></li><li><a class="dropdown__link" href="/ms/docs/adapters">Penyesuai</a></li><li><a class="dropdown__link" href="/ms/docs/category/api">API</a></li><li><a class="dropdown__link" href="/ms/docs/ide-plugins">Pengaya IDE</a></li><li><a class="dropdown__link" href="/ms/docs/contributing">Mula Berkontribusi</a></li></ul></div><a class="navbar__item navbar__link" href="/ms/ecosystem">Plugins</a><a class="navbar__item navbar__link" href="/ms/gallery">Authorization Models</a><a class="navbar__item navbar__link" href="/ms/editor">GUI Policy Editor</a><a class="navbar__item navbar__link" href="/ms/blog">Blog</a><a class="navbar__item navbar__link" href="/ms/help">Bantuan</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="iconLanguage_nlXk"><path fill="currentColor" d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"></path></svg>Melayu</a><ul class="dropdown__menu"><li><a href="/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="en">English</a></li><li><a href="/zh/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="zh">中文</a></li><li><a href="/ko/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="ko">한국어</a></li><li><a href="/ru/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="ru">Русский</a></li><li><a href="/fr/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="fr">Français</a></li><li><a href="/de/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="de">Deutsch</a></li><li><a href="/ja/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="ja">日本語</a></li><li><a href="/es/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="es">Español</a></li><li><a href="/pt/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="pt">Português</a></li><li><a href="/uk/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="uk">Українська</a></li><li><a href="/th/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="th">ไทย</a></li><li><a href="/ar/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="ar">العربية</a></li><li><a href="/id/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="id">Indonesia</a></li><li><a href="/vi/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="vi">Tiếng Việt</a></li><li><a href="/it/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="it">Italiano</a></li><li><a href="/ms/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang="ms">Melayu</a></li><li><a href="/tr/docs/syntax-for-models" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="tr">Türkçe</a></li><li class=""><hr style="margin: 0.3rem 0;"></li><li><a href="https://crowdin.com/project/casbin-website" target="_blank" rel="noopener noreferrer" class="dropdown__link">Help Us Translate<svg width="12" height="12" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><a href="https://github.com/casbin/casbin" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><a href="https://discord.gg/S5UjpzGZjN" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-community-discord"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Cari (Meta+k)" aria-keyshortcuts="Meta+k"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Cari</span></span><span class="DocSearch-Button-Keys"></span></button></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Tukar antara mod gelap dan mod terang (kini system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Tatal Kembali ke Atas" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd sidebarWithHideableNavbar_wUlq"><a tabindex="-1" class="sidebarLogo_isFc" href="/ms/"><img src="https://cdn.casbin.org/img/casbin_logo_1024x256.png" alt="Casbin Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="https://cdn.casbin.org/img/casbin_logo_1024x256.png" alt="Casbin Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"><b></b></a><nav aria-label="Sidebar Dokumen" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/the-basics"><span title="Asas-asas" class="categoryLinkLabel_W154">Asas-asas</span></a><button aria-label="Collapse sidebar category &#x27;Asas-asas&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/overview"><span title="Overview" class="linkLabel_WmDU">Overview</span></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="/ms/docs/get-started"><span title="Get Started" class="linkLabel_WmDU">Get Started</span></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="/ms/docs/how-it-works"><span title="How It Works" class="linkLabel_WmDU">How It Works</span></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="/ms/docs/tutorials"><span title="Tutorials" class="linkLabel_WmDU">Tutorials</span></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="categoryLink_byQd menu__link menu__link--sublist menu__link--active" href="/ms/docs/category/model"><span title="Model" class="categoryLinkLabel_W154">Model</span></a><button aria-label="Collapse sidebar category &#x27;Model&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/supported-models"><span title="Supported Models" class="linkLabel_WmDU">Supported Models</span></a></li><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="/ms/docs/syntax-for-models"><span title="Syntax for Models" class="linkLabel_WmDU">Syntax for Models</span></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="/ms/docs/effector"><span title="Effector" class="linkLabel_WmDU">Effector</span></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="/ms/docs/function"><span title="Functions" class="linkLabel_WmDU">Functions</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex="0" href="/ms/docs/rbac-overview"><span title="RBAC" class="categoryLinkLabel_W154">RBAC</span></a><button aria-label="Collapse sidebar category &#x27;RBAC&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/rbac"><span title="RBAC" class="linkLabel_WmDU">RBAC</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/rbac-with-pattern"><span title="RBAC with Pattern" class="linkLabel_WmDU">RBAC with Pattern</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/rbac-with-domains"><span title="RBAC with Domains" class="linkLabel_WmDU">RBAC with Domains</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/rbac-with-conditions"><span title="RBAC with Conditions" class="linkLabel_WmDU">RBAC with Conditions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/rbac-96"><span title="Casbin RBAC vs. RBAC96" class="linkLabel_WmDU">Casbin RBAC vs. RBAC96</span></a></li></ul></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="/ms/docs/rebac"><span title="ReBAC" class="linkLabel_WmDU">ReBAC</span></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="/ms/docs/abac"><span title="ABAC" class="linkLabel_WmDU">ABAC</span></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="/ms/docs/pbac"><span title="PBAC" class="linkLabel_WmDU">PBAC</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex="0" href="/ms/docs/mac-overview"><span title="MAC" class="categoryLinkLabel_W154">MAC</span></a><button aria-label="Collapse sidebar category &#x27;MAC&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/blp"><span title="BLP" class="linkLabel_WmDU">BLP</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/biba"><span title="Biba" class="linkLabel_WmDU">Biba</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/lbac"><span title="LBAC" class="linkLabel_WmDU">LBAC</span></a></li></ul></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="/ms/docs/orbac"><span title="OrBAC" class="linkLabel_WmDU">OrBAC</span></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="/ms/docs/priority-model"><span title="Priority Model" class="linkLabel_WmDU">Priority Model</span></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="/ms/docs/ucon"><span title="Usage Control (UCON)" class="linkLabel_WmDU">Usage Control (UCON)</span></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="/ms/docs/superadmin"><span title="Super Admin" class="linkLabel_WmDU">Super Admin</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/storage"><span title="Penyimpanan" class="categoryLinkLabel_W154">Penyimpanan</span></a><button aria-label="Collapse sidebar category &#x27;Penyimpanan&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/model-storage"><span title="Model Storage" class="linkLabel_WmDU">Model Storage</span></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="/ms/docs/policy-storage"><span title="Policy Storage" class="linkLabel_WmDU">Policy Storage</span></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="/ms/docs/policy-subset-loading"><span title="Policy Subset Loading" class="linkLabel_WmDU">Policy Subset Loading</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/scenarios"><span title="Senario" class="categoryLinkLabel_W154">Senario</span></a><button aria-label="Collapse sidebar category &#x27;Senario&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/data-permissions"><span title="Data Permissions" class="linkLabel_WmDU">Data Permissions</span></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="/ms/docs/menu-permissions"><span title="Menu Permissions" class="linkLabel_WmDU">Menu Permissions</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/plugins-overview"><span title="Plugins" class="categoryLinkLabel_W154">Plugins</span></a><button aria-label="Collapse sidebar category &#x27;Plugins&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/enforcers"><span title="Enforcers" class="linkLabel_WmDU">Enforcers</span></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="/ms/docs/adapters"><span title="Adapters" class="linkLabel_WmDU">Adapters</span></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="/ms/docs/watchers"><span title="Watchers" class="linkLabel_WmDU">Watchers</span></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="/ms/docs/dispatchers"><span title="Dispatchers" class="linkLabel_WmDU">Dispatchers</span></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="/ms/docs/role-managers"><span title="Role Managers" class="linkLabel_WmDU">Role Managers</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex="0" href="/ms/docs/middlewares"><span title="Middlewares" class="categoryLinkLabel_W154">Middlewares</span></a><button aria-label="Collapse sidebar category &#x27;Middlewares&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/kong-authz"><span title="Kong" class="linkLabel_WmDU">Kong</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/graphql-middlewares"><span title="GraphQL" class="linkLabel_WmDU">GraphQL</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/ms/docs/cloud-native"><span title="Cloud Native" class="linkLabel_WmDU">Cloud Native</span></a></li></ul></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/api"><span title="API" class="categoryLinkLabel_W154">API</span></a><button aria-label="Collapse sidebar category &#x27;API&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/api-overview"><span title="Overview" class="linkLabel_WmDU">Overview</span></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="/ms/docs/management-api"><span title="Management API" class="linkLabel_WmDU">Management API</span></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="/ms/docs/rbac-api"><span title="RBAC API" class="linkLabel_WmDU">RBAC API</span></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="/ms/docs/rbac-with-domains-api"><span title="RBAC with Domains API" class="linkLabel_WmDU">RBAC with Domains API</span></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="/ms/docs/rbac-with-conditions-api"><span title="RBAC with Conditions API" class="linkLabel_WmDU">RBAC with Conditions API</span></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="/ms/docs/rolemanager-api"><span title="RoleManager API" class="linkLabel_WmDU">RoleManager API</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/advanced-usage"><span title="Penggunaan Lanjutan" class="categoryLinkLabel_W154">Penggunaan Lanjutan</span></a><button aria-label="Collapse sidebar category &#x27;Penggunaan Lanjutan&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/multi-threading"><span title="Multi-threading" class="linkLabel_WmDU">Multi-threading</span></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="/ms/docs/benchmark"><span title="Benchmarks" class="linkLabel_WmDU">Benchmarks</span></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="/ms/docs/performance"><span title="Performance Optimization" class="linkLabel_WmDU">Performance Optimization</span></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="/ms/docs/k8s"><span title="Authorization of Kubernetes" class="linkLabel_WmDU">Authorization of Kubernetes</span></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="/ms/docs/k8s-gatekeeper"><span title="Admission Webhook for K8s" class="linkLabel_WmDU">Admission Webhook for K8s</span></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="/ms/docs/envoy"><span title="Authorization of Service Mesh through Envoy" class="linkLabel_WmDU">Authorization of Service Mesh through Envoy</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/management"><span title="Pengurusan" class="categoryLinkLabel_W154">Pengurusan</span></a><button aria-label="Collapse sidebar category &#x27;Pengurusan&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/admin-portal"><span title="Admin Portal" class="linkLabel_WmDU">Admin Portal</span></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="/ms/docs/service"><span title="Casbin Service" class="linkLabel_WmDU">Casbin Service</span></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="/ms/docs/command-line-tools"><span title="Command-line Tools" class="linkLabel_WmDU">Command-line Tools</span></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="/ms/docs/log-error"><span title="Log &amp; Error Handling" class="linkLabel_WmDU">Log &amp; Error Handling</span></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="/ms/docs/frontend"><span title="Frontend Usage" class="linkLabel_WmDU">Frontend Usage</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/editor"><span title="Editor" class="categoryLinkLabel_W154">Editor</span></a><button aria-label="Collapse sidebar category &#x27;Editor&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/online-editor"><span title="Online Editor" class="linkLabel_WmDU">Online Editor</span></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="/ms/docs/ide-plugins"><span title="IDE Plugins" class="linkLabel_WmDU">IDE Plugins</span></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="categoryLink_byQd menu__link menu__link--sublist" href="/ms/docs/category/more"><span title="Lain-lain" class="categoryLinkLabel_W154">Lain-lain</span></a><button aria-label="Collapse sidebar category &#x27;Lain-lain&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul 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="/ms/docs/adopters"><span title="Our Adopters" class="linkLabel_WmDU">Our Adopters</span></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="/ms/docs/contributing"><span title="Contributing" class="linkLabel_WmDU">Contributing</span></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="/ms/docs/privacy-policy"><span title="Privacy Policy" class="linkLabel_WmDU">Privacy Policy</span></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="/ms/docs/terms-of-service"><span title="Terms of Service" class="linkLabel_WmDU">Terms of Service</span></a></li></ul></li></ul></nav><button type="button" title="Runtuhkan sidebar" aria-label="Runtuhkan sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Jejak Roti"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Laman Utama" class="breadcrumbs__link" href="/ms/"><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"><a class="breadcrumbs__link" href="/ms/docs/category/model"><span>Model</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Syntax for Models</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">Pada halaman ini</button></div><div class="theme-doc-markdown markdown"><header><h1>Syntax for Models</h1></header><ul>
<li class="">
<p>Konfigurasi model (CONF) harus mempunyai sekurang-kurangnya empat bahagian: <code>[request_definition]</code>, <code>[policy_definition]</code>, <code>[policy_effect]</code>, dan <code>[matchers]</code>.</p>
</li>
<li class="">
<p>Jika model menggunakan Kontrol Akses Berbasis Peranan (RBAC), ia juga harus memasukkan bahagian <code>[role_definition]</code>.</p>
</li>
<li class="">
<p>Konfigurasi model (CONF) boleh mengandungi komen. Komen bermula dengan simbol <code>#</code>, dan semua yang berada selepas simbol <code>#</code> akan dikomen keluar.</p>
</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="definisi-permintaan">Definisi permintaan<a href="#definisi-permintaan" class="hash-link" aria-label="Pautan terus ke Definisi permintaan" title="Pautan terus ke Definisi permintaan" translate="no">​</a></h2>
<p>Bahagian <code>[request_definition]</code> mentakrifkan argumen dalam fungsi <code>e.Enforce(...)</code>.</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">request_definition</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">r</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">sub, obj, act</span><br></span></code></pre></div></div>
<p>Dalam contoh ini, <code>sub</code>, <code>obj</code>, dan <code>act</code> mewakili tiga klasik akses: subjek (entiti yang mengakses), objek (sumber yang diakses), dan tindakan (cara akses). Walau bagaimanapun, anda boleh menyesuaikan format permintaan anda sendiri. Sebagai contoh, anda boleh menggunakan <code>sub, act</code> jika anda tidak perlu menentukan sumber tertentu, atau <code>sub, sub2, obj, act</code> jika anda mempunyai dua entiti yang mengakses.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="takrifan-polisi">Takrifan Polisi<a href="#takrifan-polisi" class="hash-link" aria-label="Pautan terus ke Takrifan Polisi" title="Pautan terus ke Takrifan Polisi" translate="no">​</a></h2>
<p><code>[policy_definition]</code> adalah takrifan untuk satu polisi. Ia mentakrifkan makna polisi tersebut. Sebagai contoh, kami mempunyai model berikut:</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">policy_definition</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">p</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">sub, obj, act</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">p2</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">sub, act</span><br></span></code></pre></div></div>
<p>Dan kami mempunyai polisi berikut (jika dalam fail polisi):</p>
<div class="language-csv codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csv codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token value">p</span><span class="token punctuation" style="color:#393A34">,</span><span class="token value"> alice</span><span class="token punctuation" style="color:#393A34">,</span><span class="token value"> data1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token value"> read</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token value">p2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token value"> bob</span><span class="token punctuation" style="color:#393A34">,</span><span class="token value"> write-all-objects</span><br></span></code></pre></div></div>
<p>Setiap baris dalam polisi dipanggil peraturan polisi. Setiap peraturan polisi bermula dengan <code>jenis polisi</code>, seperti <code>p</code> atau <code>p2</code>. Ia digunakan untuk memadankan takrifan polisi jika terdapat beberapa takrifan. Dasar di atas menunjukkan ikatan berikut. Ikatan ini boleh digunakan dalam penapis.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">(alice, data1, read) -&gt; (p.sub, p.obj, p.act)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(bob, write-all-objects) -&gt; (p2.sub, p2.act)</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>petua</div><div class="admonitionContent_BuS1"><p>Elemen dalam peraturan dasar sentiasa dianggap sebagai <code>rentetan</code>. Sekiranya anda mempunyai sebarang pertanyaan mengenai ini, sila rujuk perbincangan di: <a href="https://github.com/casbin/casbin/issues/113" target="_blank" rel="noopener noreferrer" class="">https://github.com/casbin/casbin/issues/113</a></p></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="kesan-dasar">Kesan Dasar<a href="#kesan-dasar" class="hash-link" aria-label="Pautan terus ke Kesan Dasar" title="Pautan terus ke Kesan Dasar" translate="no">​</a></h2>
<p><code>[policy_effect]</code> adalah definisi untuk kesan dasar. Ia menentukan sama ada permintaan akses harus diluluskan jika berbilang peraturan dasar sepadan dengan permintaan tersebut. Contohnya, satu peraturan membenarkan dan yang lain menafikan.</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">policy_effect</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">e</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">some(where (p.eft == allow))</span><br></span></code></pre></div></div>
<p>Kesan dasar di atas bermakna jika terdapat sebarang peraturan dasar yang sepadan dengan <code>benarkan</code>, kesan akhir adalah <code>benarkan</code> (juga dikenali sebagai benarkan-timpa). <code>p.eft</code> adalah kesan untuk satu dasar, dan ia boleh menjadi sama ada <code>benarkan</code> atau <code>nafi</code>. Ia adalah pilihan, dan nilai lalai ialah <code>allow</code>. Oleh kerana kita tidak menentukannya di atas, ia menggunakan nilai lalai.</p>
<p>Satu lagi contoh untuk kesan dasar ialah:</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">policy_effect</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">e</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">!some(where (p.eft == deny))</span><br></span></code></pre></div></div>
<p>Ini bermakna jika tiada peraturan dasar yang sepadan dengan <code>deny</code>, kesan akhir ialah <code>allow</code> (juga dikenali sebagai deny-override). <code>some</code> bermakna terdapat sekurang-kurangnya satu peraturan dasar yang sepadan. <code>any</code> bermakna semua peraturan dasar yang sepadan (tidak digunakan di sini). Kesan dasar juga boleh dihubungkaitkan dengan ungkapan logik:</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">policy_effect</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">e</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">some(where (p.eft == allow)) &amp;&amp; !some(where (p.eft == deny))</span><br></span></code></pre></div></div>
<p>Ini bermakna mesti ada sekurang-kurangnya satu peraturan dasar yang sepadan dengan <code>allow</code>, dan tidak boleh ada peraturan dasar yang sepadan dengan <code>deny</code>. Oleh itu, dengan cara ini, kedua-dua kebenaran dan penafian diluluskan disokong, dan penafian mengatasi.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>nota</div><div class="admonitionContent_BuS1"><p>Walaupun kita mereka bentuk sintaks kesan dasar seperti di atas, pelaksanaan semasa hanya menggunakan kesan dasar yang dikodkan secara keras. Ini kerana kami mendapati bahawa tidak ada keperluan yang besar untuk tahap fleksibiliti tersebut. Jadi buat masa ini, anda mesti menggunakan salah satu kesan polisi terbina dalam daripada menyesuaikan sendiri.</p></div></div>
<p>Kesan polisi terbina dalam yang disokong adalah:</p>
<table><thead><tr><th>Kesan Polisi</th><th>Maksud</th><th>Contoh</th></tr></thead><tbody><tr><td>some(where (p.eft == allow))</td><td>allow-override</td><td><a class="" href="/ms/docs/supported-models#examples">ACL, RBAC, dll.</a></td></tr><tr><td>!some(where (p.eft == deny))</td><td>tolak-mengatasi</td><td><a class="" href="/ms/docs/supported-models#examples">Tolak-mengatasi</a></td></tr><tr><td>beberapa(tempat (p.eft == benarkan)) &amp;&amp; !beberapa(tempat (p.eft == tolak))</td><td>benarkan-dan-tolak</td><td><a class="" href="/ms/docs/supported-models#examples">Benarkan-dan-tolak</a></td></tr><tr><td>keutamaan(p.eft) || tolak</td><td>keutamaan</td><td><a class="" href="/ms/docs/supported-models#examples">Keutamaan</a></td></tr><tr><td>keutamaanSubjek(p.eft)</td><td>keutamaan berdasarkan peranan</td><td><a class="" href="/ms/docs/supported-models#examples">Subjek-Keutamaan</a></td></tr></tbody></table>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="pemadanan">Pemadanan<a href="#pemadanan" class="hash-link" aria-label="Pautan terus ke Pemadanan" title="Pautan terus ke Pemadanan" translate="no">​</a></h2>
<p><code>[pemadanan]</code> adalah definisi untuk pemadanan polisi. Pemadanan adalah ungkapan yang mentakrifkan bagaimana peraturan polisi dinilai terhadap permintaan.</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">matchers</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">m</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">r.sub == p.sub &amp;&amp; r.obj == p.obj &amp;&amp; r.act == p.act</span><br></span></code></pre></div></div>
<p>Pemadanan di atas adalah yang paling mudah dan bermaksud bahawa subjek, objek, dan tindakan dalam permintaan harus sepadan dengan yang ada dalam peraturan polisi.</p>
<p>Operator aritmetik seperti <code>+, -, *, /</code> dan operator logik seperti <code>&amp;&amp;, ||, !</code> boleh digunakan dalam pemadanan.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="susunan-ungkapan-dalam-pemadanan">Susunan ungkapan dalam pemadanan<a href="#susunan-ungkapan-dalam-pemadanan" class="hash-link" aria-label="Pautan terus ke Susunan ungkapan dalam pemadanan" title="Pautan terus ke Susunan ungkapan dalam pemadanan" translate="no">​</a></h3>
<p>Susunan ungkapan boleh memberi kesan yang besar kepada prestasi. Lihat contoh berikut untuk butiran lanjut:</p>
<div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> rbac_models </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">`</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[request_definition]</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">r = sub, obj, act</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[policy_definition]</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">p = sub, obj, act</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[role_definition]</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">g = _, _</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[policy_effect]</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">e = some(where (p.eft == allow))</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">[matchers]</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">m = g(r.sub, p.sub) &amp;&amp; r.obj == p.obj &amp;&amp; r.act == p.act</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">func</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">TestManyRoles</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">t </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">testing</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">T</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> m</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> model</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">NewModelFromString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">rbac_models</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">NewEnforcer</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">m</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> roles </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&quot;admin&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;manager&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;developer&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;tester&quot;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 2500 projects</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> nbPrj </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> nbPrj </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2500</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> nbPrj</span><span class="token operator" style="color:#393A34">++</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 4 objects and 1 role per object (so 4 roles)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> role </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">range</span><span class="token plain"> roles </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> roleDB </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Sprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;%s_project:%d&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> role</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> nbPrj</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> objectDB </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Sprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;/projects/%d&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> nbPrj</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddPolicy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">roleDB</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> objectDB</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;GET&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> jasmineRole </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Sprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;%s_project:%d&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> roles</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> nbPrj</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddGroupingPolicy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;jasmine&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> jasmineRole</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddGroupingPolicy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;abu&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;manager_project:1&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddGroupingPolicy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;abu&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;manager_project:2499&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// With same number of policies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// User &#x27;abu&#x27; has only two roles</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// User &#x27;jasmine&#x27; has many roles (1 role per policy, here 2500 roles)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> request </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">func</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">subject</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> object</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> t0 </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> time</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Now</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> resp</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">subject</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> object</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> tElapse </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> time</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Since</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">t0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> t</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Logf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;RESPONSE %-10s %s\t %s : %5v IN: %+v&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> subject</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> object</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> resp</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> tElapse</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> tElapse </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> time</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Millisecond</span><span class="token operator" style="color:#393A34">*</span><span class="token number" style="color:#36acaa">100</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> t</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Errorf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;More than 100 milliseconds for %s %s %s : %+v&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> subject</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> object</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> tElapse</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">request</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;abu&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/projects/1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;GET&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// really fast because only 2 roles in all policies and at the beginning of the casbin_rule table</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">request</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;abu&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/projects/2499&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;GET&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// fast because only 2 roles in all policies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">request</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;jasmine&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/projects/1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;GET&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// really fast at the beginning of the casbin_rule table</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">request</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;jasmine&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/projects/2499&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;GET&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// slow and fails the only 1st time &lt;&lt;&lt;&lt; pb here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">request</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;jasmine&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/projects/2499&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;GET&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// fast maybe due to internal cache mechanism</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// same issue with non-existing roles</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// request(&quot;jasmine&quot;, &quot;/projects/999999&quot;, &quot;GET&quot;) // slow fails the only 1st time &lt;&lt;&lt;&lt; pb here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// request(&quot;jasmine&quot;, &quot;/projects/999999&quot;, &quot;GET&quot;) // fast maybe due to internal cache mechanism</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Masa penguatkuasaan mungkin sangat lama, sehingga 6 saat.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">go test -run ^TestManyRoles$ github.com/casbin/casbin/v2 -v</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">=== RUN TestManyRoles</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:598: RESPONSE abu /projects/1 GET : true IN: 438.379µs</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:598: RESPONSE abu /projects/2499 GET : true IN: 39.005173ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:598: RESPONSE jasmine /projects/1 GET : true IN: 1.774319ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:598: RESPONSE jasmine /projects/2499 GET : true IN: 6.164071648s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:600: More than 100 milliseconds for jasmine /projects/2499 GET : 6.164071648s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:598: RESPONSE jasmine /projects/2499 GET : true IN: 12.164122ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--- FAIL: TestManyRoles (6.24s)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FAIL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FAIL github.com/casbin/casbin/v2 6.244s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FAIL</span><br></span></code></pre></div></div>
<p>Walau bagaimanapun, jika kita menyesuaikan susunan ungkapan dalam penapis dan meletakkan ungkapan yang memakan lebih banyak masa seperti fungsi di belakang, masa pelaksanaan akan menjadi sangat singkat.</p>
<p>Menukar susunan ungkapan dalam penapis dalam contoh di atas kepada:</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">matchers</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">m</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">r.obj == p.obj &amp;&amp; g(r.sub, p.sub) &amp;&amp; r.act == p.act</span><br></span></code></pre></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">go test -run ^TestManyRoles$ github.com/casbin/casbin/v2 -v</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">=== RUN TestManyRoles</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:599: RESPONSE abu /projects/1 GET : true IN: 786.635µs</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:599: RESPONSE abu /projects/2499 GET : true IN: 4.933064ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:599: RESPONSE jasmine /projects/1 GET : true IN: 2.908534ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:599: RESPONSE jasmine /projects/2499 GET : true IN: 7.292963ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> rbac_api_test.go:599: RESPONSE jasmine /projects/2499 GET : true IN: 6.168307ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--- PASS: TestManyRoles (0.05s)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">PASS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ok github.com/casbin/casbin/v2 0.053s</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="pelbagai-jenis-bahagian">Pelbagai Jenis Bahagian<a href="#pelbagai-jenis-bahagian" class="hash-link" aria-label="Pautan terus ke Pelbagai Jenis Bahagian" title="Pautan terus ke Pelbagai Jenis Bahagian" translate="no">​</a></h2>
<p>Jika anda memerlukan pelbagai definisi polisi atau pelbagai penapis, anda boleh menggunakan <code>p2</code> atau <code>m2</code> sebagai contoh. Sebenarnya, keempat-empat bahagian yang dinyatakan di atas boleh menggunakan pelbagai jenis, dan sintaksnya adalah <code>r</code> diikuti dengan nombor, seperti <code>r2</code> atau <code>e2</code>. Secara lalai, keempat-empat bahagian ini harus sepadan satu-dengan-satu. Sebagai contoh, bahagian <code>r2</code> anda hanya akan menggunakan penapis <code>m2</code> untuk memadankan polisi <code>p2</code>.</p>
<p>Anda boleh menyampaikan <code>EnforceContext</code> sebagai parameter pertama kaedah <code>enforce</code> untuk menentukan jenis. <code>EnforceContext</code> ditakrifkan seperti berikut:</p>
<div class="theme-tabs-container tabs-container tabList_TRJ7"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_hGfb tabs__item--active"><img src="https://cdn.casbin.org/language/go-logo-1.svg" alt="Go" class="tabIcon_JsrN" title="Go"></li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_hGfb"><img src="https://cdn.casbin.org/language/nodejs-1.svg" alt="Node.js" class="tabIcon_JsrN" title="Node.js"></li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_hGfb"><img src="https://cdn.casbin.org/language/jee-3.svg" alt="Java" class="tabIcon_JsrN" title="Java"></li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_s4ch"><div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">EnforceContext</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&quot;r2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">&quot;p2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">&quot;e2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">&quot;m2&quot;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">type</span><span class="token plain"> EnforceContext </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> RType </span><span class="token builtin">string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> PType </span><span class="token builtin">string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> EType </span><span class="token builtin">string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> MType </span><span class="token builtin">string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_s4ch" hidden=""><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> enforceContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">EnforceContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;r2&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;p2&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;e2&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;m2&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">EnforceContext</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">rType</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> pType</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> eType</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> mType</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">pType</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> pType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">eType</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> eType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">mType</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> mType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">rType</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> rType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_s4ch" hidden=""><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token class-name">EnforceContext</span><span class="token plain"> enforceContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">EnforceContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;2&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">EnforceContext</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> pType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> eType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> mType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> rType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token class-name">EnforceContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> suffix</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">pType </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;p&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> suffix</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">eType </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;e&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> suffix</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">mType </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;m&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> suffix</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">rType </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;r&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> suffix</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div></div></div></div>
<p>Berikut adalah contoh penggunaan. Sila rujuk kepada <a href="https://github.com/casbin/casbin/blob/master/examples/multiple_policy_definitions_model.conf" target="_blank" rel="noopener noreferrer" class="">model</a> dan <a href="https://github.com/casbin/casbin/blob/master/examples/multiple_policy_definitions_policy.csv" target="_blank" rel="noopener noreferrer" class="">polisi</a>. Permintaannya adalah seperti berikut:</p>
<div class="theme-tabs-container tabs-container tabList_TRJ7"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_hGfb tabs__item--active"><img src="https://cdn.casbin.org/language/go-logo-1.svg" alt="Go" class="tabIcon_JsrN" title="Go"></li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_hGfb"><img src="https://cdn.casbin.org/language/nodejs-1.svg" alt="Node.js" class="tabIcon_JsrN" title="Node.js"></li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_hGfb"><img src="https://cdn.casbin.org/language/jee-3.svg" alt="Java" class="tabIcon_JsrN" title="Java"></li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_s4ch"><div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Pass in a suffix as a parameter to NewEnforceContext, such as 2 or 3, and it will create r2, p2, etc.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">enforceContext </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">NewEnforceContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;2&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// You can also specify a certain type individually</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">EType </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;e&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Don&#x27;t pass in EnforceContext; the default is r, p, e, m</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;data2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Pass in EnforceContext</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">struct</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> Age </span><span class="token builtin">int</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">Age</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">70</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/data1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">//false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">struct</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> Age </span><span class="token builtin">int</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">Age</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/data1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">//true</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_s4ch" hidden=""><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Pass in a suffix as a parameter to NewEnforceContext, such as 2 or 3, and it will create r2, p2, etc.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> enforceContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">NewEnforceContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;2&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// You can also specify a certain type individually</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">eType</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;e&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Don&#x27;t pass in EnforceContext; the default is r, p, e, m</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access maybe-class-name" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;data2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Pass in EnforceContext</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access maybe-class-name" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token literal-property property" style="color:#36acaa">Age</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">70</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/data1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">//false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access maybe-class-name" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token literal-property property" style="color:#36acaa">Age</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/data1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">//true</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_s4ch" hidden=""><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Pass in a suffix as a parameter to NewEnforceContext, such as 2 or 3, and it will create r2, p2, etc.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">EnforceContext</span><span class="token plain"> enforceContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">EnforceContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;2&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// You can also specify a certain type individually</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">seteType</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;e&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Don&#x27;t pass in EnforceContext; the default is r, p, e, m</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;data2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Pass in EnforceContext</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// TestEvalRule is located in https://github.com/casbin/jcasbin/blob/master/src/test/java/org/casbin/jcasbin/main/AbacAPIUnitTest.java#L56</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">AbacAPIUnitTest</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">TestEvalRule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">70</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/data1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">enforceContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">AbacAPIUnitTest</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">TestEvalRule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/data1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;read&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// true</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="tatabahasa-khas">Tatabahasa Khas<a href="#tatabahasa-khas" class="hash-link" aria-label="Pautan terus ke Tatabahasa Khas" title="Pautan terus ke Tatabahasa Khas" translate="no">​</a></h2>
<p>Anda juga boleh menggunakan operator &quot;in&quot;, yang merupakan satu-satunya operator dengan nama teks. Operator ini memeriksa tatasusunan di sebelah kanan untuk melihat sama ada ia mengandungi nilai yang sama dengan nilai di sebelah kiri. Kesamaan ditentukan dengan menggunakan operator ==, dan perpustakaan ini tidak menyemak jenis antara nilai-nilai tersebut. Selagi dua nilai boleh ditukar kepada interface<!-- --> dan masih boleh diperiksa untuk kesamaan dengan ==, ia akan bertindak seperti yang dijangkakan. Ambil perhatian bahawa anda boleh menggunakan parameter untuk tatasusunan, tetapi ia mestilah []interface<!-- -->.</p>
<p>Rujuk juga kepada <a href="https://github.com/casbin/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/examples/rbac_model_matcher_using_in_op.conf" target="_blank" rel="noopener noreferrer" class="">rbac_model_matcher_using_in_op</a>, <a href="https://github.com/casbin/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/examples/keyget2_model.conf" target="_blank" rel="noopener noreferrer" class="">keyget2_model</a>, dan <a href="https://github.com/casbin/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/examples/keyget_model.conf" target="_blank" rel="noopener noreferrer" class="">keyget_model</a>.</p>
<p>Contoh:</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">request_definition</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">r</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">sub, obj</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token section punctuation" style="color:#393A34">[</span><span class="token section section-name selector" style="color:#00009f">matchers</span><span class="token section punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">m</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain"> </span><span class="token value attr-value" style="color:#e3116c">r.sub.Name in (r.obj.Admins)</span><br></span></code></pre></div></div>
<div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Enforce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Sub</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">Name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> Obj</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">Name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;a book&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> Admins</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token keyword" style="color:#00009f">interface</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&quot;alice&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bob&quot;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="penilaian-ekspresi">Penilaian Ekspresi<a href="#penilaian-ekspresi" class="hash-link" aria-label="Pautan terus ke Penilaian Ekspresi" title="Pautan terus ke Penilaian Ekspresi" translate="no">​</a></h2>
<p>Penilaian pencocokan dalam Casbin dilaksanakan oleh penilai ekspresi dalam setiap bahasa. Casbin menggabungkan kekuatan mereka untuk menyediakan bahasa PERM yang seragam. Selain sintaks model yang diberikan di sini, penilai ekspresi ini mungkin menawarkan fungsi tambahan yang mungkin tidak didukung oleh bahasa atau implementasi lain. Harap berhati-hati ketika menggunakan fungsi ini.</p>
<p>Penilai ekspresi yang digunakan oleh setiap implementasi Casbin adalah sebagai berikut:</p>
<table><thead><tr><th>Implementasi</th><th>Bahasa</th><th>Penilai Ekspresi</th></tr></thead><tbody><tr><td>Casbin</td><td>Golang</td><td><a href="https://github.com/casbin/govaluate" target="_blank" rel="noopener noreferrer" class="">https://github.com/casbin/govaluate</a></td></tr><tr><td>jCasbin</td><td>Java</td><td><a href="https://github.com/killme2008/aviatorscript" target="_blank" rel="noopener noreferrer" class="">https://github.com/killme2008/aviatorscript</a></td></tr><tr><td>Node-Casbin</td><td>Node.js</td><td><a href="https://github.com/donmccurdy/expression-eval" target="_blank" rel="noopener noreferrer" class="">https://github.com/donmccurdy/expression-eval</a></td></tr><tr><td>PHP-Casbin</td><td>PHP</td><td><a href="https://github.com/symfony/expression-language" target="_blank" rel="noopener noreferrer" class="">https://github.com/symfony/expression-language</a></td></tr><tr><td>PyCasbin</td><td>Python</td><td><a href="https://github.com/danthedeckie/simpleeval" target="_blank" rel="noopener noreferrer" class="">https://github.com/danthedeckie/simpleeval</a></td></tr><tr><td>Casbin.NET</td><td>C#</td><td><a href="https://github.com/davideicardi/DynamicExpresso" target="_blank" rel="noopener noreferrer" class="">https://github.com/davideicardi/DynamicExpresso</a></td></tr><tr><td>Casbin4D</td><td>Delphi</td><td><a href="https://github.com/casbin4d/Casbin4D/tree/master/SourceCode/Common/Third%20Party/TExpressionParser" target="_blank" rel="noopener noreferrer" class="">https://github.com/casbin4d/Casbin4D/tree/master/SourceCode/Common/Third%20Party/TExpressionParser</a></td></tr><tr><td>casbin-rs</td><td>Rust</td><td><a href="https://github.com/jonathandturner/rhai" target="_blank" rel="noopener noreferrer" class="">https://github.com/jonathandturner/rhai</a></td></tr><tr><td>casbin-cpp</td><td>C++</td><td><a href="https://github.com/ArashPartow/exprtk" target="_blank" rel="noopener noreferrer" class="">https://github.com/ArashPartow/exprtk</a></td></tr></tbody></table>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>nota</div><div class="admonitionContent_BuS1"><p>Jika anda menghadapi masalah prestasi dengan Casbin, ia mungkin disebabkan oleh kekurangan kecekapan penilaian ungkapan. Anda boleh menangani isu ini kepada Casbin atau penilaian ungkapan terus untuk mendapatkan nasihat tentang mempercepatkan prestasi. Untuk maklumat lanjut, sila rujuk bahagian <a class="" href="/ms/docs/benchmark">Penanda Aras</a>.</p></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href="https://github.com/casbin/casbin-website-v2/edit/master/docs/SyntaxForModels.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit halaman ini</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Halaman Dokumen"><a class="pagination-nav__link pagination-nav__link--prev" href="/ms/docs/supported-models"><div class="pagination-nav__sublabel">Sebelumnya</div><div class="pagination-nav__label">Supported Models</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/ms/docs/effector"><div class="pagination-nav__sublabel">Seterusnya</div><div class="pagination-nav__label">Effector</div></a></nav><br></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#definisi-permintaan" class="table-of-contents__link toc-highlight">Definisi permintaan</a></li><li><a href="#takrifan-polisi" class="table-of-contents__link toc-highlight">Takrifan Polisi</a></li><li><a href="#kesan-dasar" class="table-of-contents__link toc-highlight">Kesan Dasar</a></li><li><a href="#pemadanan" class="table-of-contents__link toc-highlight">Pemadanan</a><ul><li><a href="#susunan-ungkapan-dalam-pemadanan" class="table-of-contents__link toc-highlight">Susunan ungkapan dalam pemadanan</a></li></ul></li><li><a href="#pelbagai-jenis-bahagian" class="table-of-contents__link toc-highlight">Pelbagai Jenis Bahagian</a></li><li><a href="#tatabahasa-khas" class="table-of-contents__link toc-highlight">Tatabahasa Khas</a></li><li><a href="#penilaian-ekspresi" class="table-of-contents__link toc-highlight">Penilaian Ekspresi</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Dokumen</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/ms/docs/get-started">Bermula</a></li><li class="footer__item"><a class="footer__link-item" href="/ms/docs/management-api">API Pengurusan</a></li><li class="footer__item"><a class="footer__link-item" href="/ms/docs/rbac-api">API RBAC</a></li><li class="footer__item"><a class="footer__link-item" href="/ms/docs/middlewares">Middleware</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Komuniti</div><ul class="footer__items clean-list"><li class="footer__item">
<a href="https://discord.gg/S5UjpzGZjN" target="_blank" rel="noopener noreferrer" class="footer__link-item footer-community-link">
<svg class="footer-community-icon" viewBox="0 0 127.14 96.36" xmlns="http://www.w3.org/2000/svg">
<path d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/>
</svg>
<span>Discord</span>
</a>
</li><li class="footer__item">
<a href="https://stackoverflow.com/search?q=casbin" target="_blank" rel="noopener noreferrer" class="footer__link-item footer-community-link">
<svg class="footer-community-icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M18.986 21.865v-6.404h2.134V24H1.844v-8.539h2.13v6.404h15.012zM6.111 19.731H16.85v-2.137H6.111v2.137zm.259-4.852l10.48 2.189.451-2.07-10.478-2.187-.453 2.068zm1.359-5.056l9.705 4.53.903-1.95-9.706-4.53-.902 1.936v.014zm2.715-4.785l8.217 6.855 1.359-1.62-8.216-6.853-1.35 1.617-.01.001zM15.751 0l-1.746 1.294 6.405 8.604 1.746-1.294L15.749 0h.002z"/>
</svg>
<span>Stack Overflow</span>
</a>
</li><li class="footer__item">
<a href="https://groups.google.com/g/casbin" target="_blank" rel="noopener noreferrer" class="footer__link-item footer-community-link">
<svg class="footer-community-icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"/>
</svg>
<span>Google Groups</span>
</a>
</li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Lain-lain</div><ul class="footer__items clean-list"><li class="footer__item">
<a href="https://github.com/casbin/casbin" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/casbin?label=Casbin&style=social">
</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://github.com/casbin/jcasbin" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/jcasbin?label=jCasbin&style=social">
</a>
</li><li class="footer__item">
<a href="https://github.com/casbin/node-casbin" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/node-casbin?label=Node-Casbin&style=social">
</a>
&nbsp;&nbsp;
<a href="https://github.com/php-casbin/php-casbin" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/php-casbin/php-casbin?label=PHP-Casbin&style=social">
</a>
</li><li class="footer__item">
<a href="https://github.com/casbin/pycasbin" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/pycasbin?label=PyCasbin&style=social">
</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://github.com/casbin/Casbin.NET" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/Casbin.NET?label=Casbin.NET&style=social">
</a>
</li><li class="footer__item">
<a href="https://github.com/casbin/casbin-cpp" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/casbin-cpp?label=Casbin-CPP&style=social">
</a>
&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://github.com/casbin/casbin-rs" target="_blank">
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/casbin/casbin-rs?label=Casbin-RS&style=social">
</a>
</li><li class="footer__item">
<a href="https://twitter.com/casbinHQ" target="_blank">
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/casbinHQ?style=social">
</a>
</li><li class="footer__item">
<script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?2c0ffc6f8d49e98d964d59d7aa4cbf34";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script>
</li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a class="footerLogoLink_BH7S" href="/ms/"><img src="/ms/img/casbin_min.svg" alt="Logo Casbin" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE"><img src="/ms/img/casbin_min.svg" alt="Logo Casbin" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU"></a></div><div class="footer__copyright">Copyright © 2025 Casbin Organization</div></div></div></footer></div>
</body>
</html>