Casbin

Casbin

  • Docs
  • API
  • Editor
  • JetBrains Plugin
  • Casdoor
  • Forum
  • OA
  • Trend
  • Cloud
  • Help
  • Blog
  • Languages iconEnglish
    • 中文
    • 한국어
    • Help Translate
  • GitHub

›Model

The Basics

  • Overview
  • Get Started
  • How it Works
  • Tutorials

Model

  • Supported Models
  • Syntax for Models
  • Function
  • RBAC
  • RBAC with Domains
  • ABAC

Storage

  • Model Storage
  • Policy Storage
  • Policy Subset Loading

Extensions

  • Adapters
  • Watchers
  • Dispatchers
  • Role Managers
  • Middlewares

API

  • Management API
  • RBAC API

Advanced Usage

  • Multi-threading
  • Benchmarks
  • Performance Optimization

Management

  • Admin Portal
  • Casbin Service
  • Log & Error Handling
  • Online Editor
  • Frontend Usage

More

  • Our Adopters
  • Privacy Policy
  • Terms of Service
Edit

Function

Functions in matchers

You can even specify functions in a matcher to make it more powerful. You can use the built-in functions or specify your own function. All built-in functions take such a format(except keyGet and keyGet2):

bool function_name(string arg1, string arg2)

It returns whether arg1 matches arg2.

keyGet and keyGet2 will return the string which matching the wildcard, and return "" if nothing was matched.

The supported built-in functions are:

Functionarg1arg2Example
keyMatcha URL path like /alice_data/resource1a URL path or a * pattern like /alice_data/*keymatch_model.conf/keymatch_policy.csv
keyGeta URL path like /alice_data/resource1a URL path or a * pattern like /alice_data/*keyget_model.conf/keymatch_policy.csv
keyMatch2a URL path like /alice_data/resource1a URL path or a : pattern like /alice_data/:resourcekeymatch2_model.conf/keymatch2_policy.csv
keyGet2a URL path like /alice_data/resource1a URL path or : pattern like /alice_data/:resourcekeyget2_model.conf/keymatch2_policy.csv
keyMatch3a URL path like /alice_data/resource1a URL path or a {} pattern like /alice_data/{resource}
keyMatch4a URL path like /alice_data/123/book/123a URL path or a {} pattern like /alice_data/{id}/book/{id}
regexMatchany stringa regular expression patternkeymatch_model.conf/keymatch_policy.csv
ipMatchan IP address like 192.168.2.123an IP address or a CIDR like 192.168.2.0/24ipmatch_model.conf/ipmatch_policy.csv

See details for above functions at: https://github.com/casbin/casbin/blob/master/util/builtin_operators_test.go

How to add a customized function

First prepare your function. It takes several parameters and return a bool:

func KeyMatch(key1 string, key2 string) bool {
    i := strings.Index(key2, "*")
    if i == -1 {
        return key1 == key2
    }

    if len(key1) > i {
        return key1[:i] == key2[:i]
    }
    return key1 == key2[:i]
}

Then wrap it with interface{} types:

func KeyMatchFunc(args ...interface{}) (interface{}, error) {
    name1 := args[0].(string)
    name2 := args[1].(string)

    return (bool)(KeyMatch(name1, name2)), nil
}

At last, register the function to the Casbin enforcer:

e.AddFunction("my_func", KeyMatchFunc)

Now, you can use the function in your model CONF like this:

[matchers]
m = r.sub == p.sub && my_func(r.obj, p.obj) && r.act == p.act
Last updated on 1/11/2021
← Syntax for ModelsRBAC →
  • Functions in matchers
  • How to add a customized function
Casbin
Docs
Getting StartedManagement APIRBAC APIMiddlewares
Community
Who's using Casbin?ForumStack OverflowProject Chat
Casbin          jCasbin
Node-Casbin   PHP-CasbinPyCasbin          Casbin.NETCasbin-CPP        Casbin-RS
Follow @CasbinNews
Copyright © 2021 Casbin contributors.