Casbin-CPP provides language bindings to compound the advantages of different languages and to make authorization easier and faster.
At present, casbin-cpp provides language bindings for Python.
It is assumed you have CMake >=v3.19 and Python >= 3.2 installed.
-
Clone/download the project:
git clone https://github.com/casbin/casbin-cpp.git
-
Make a build directory and generate project files through CMake:
mkdir build cd build cmake ..Note: Kindly look at the log message to find the directory you need to add in your
sys.path(Step 5). The log may look like this:[pycasbin]: Build "pycasbin" target for Python Bindings [pycasbin]: Add "lib/python3.9/site-packages" to your sys.path/USER_SITE variable if not already present
-
Build the python bindings (
pycasbintarget):cmake --build . --config Release --target pycasbin -
Install the
pycasbinmodule:cmake --build . --config Release --target installThis will install the module to:
<prefix>/lib/site-packageson Windows.<prefix>/lib/python3.x/site-packageson UNIX.
Note: The actual install path can be deduced in the log output of Step 2.
-
Add the correct
site-packagesdirectory path tosys.pathorUSER_SITEof your current python configuration if not already present.
Now, you're ready to go!
It is assumed that you have pycasbin module correctly installed on your system.
First, we import the pycasbin module to a python source file:
import pycasbin as casbinSuppose we want a function to check authorization of a request:
def isAuthorized(req):
result = True
if result:
print('Authorized')
else
print('Not authorized!')Here, the request can be a list or a dictionary in the forms:
req = ['subject1', 'object1', 'action1'] # and so on..
req = {
"sub": "subject1",
"obj": "object1",
"act": "action1" # ... and so on
}We can Enforce this request (or compute the result of this request) through casbin.Enforce().
For that, we need to create a casbin.Enforcer:
e = casbin.Enforcer('path/to/model.conf', 'path/to/policy.csv')Make sure that the paths are relative to the current python source file or an absolute path.
Apart from the regular Enforcer, you may also use CachedEnforcer
depending on your use case.
Incorporating the Enforcer in our example gives us:
def isAuthorized(req):
result = e.Enforce(req)
if result:
print('Authorized')
else
print('Not authorized!')Rest of the method's name is on par with casbin-CPP.
This sums up the basic usage of pycasbin module:
import pycasbin as casbin
e = casbin.Enforcer('path/to/model.conf', 'path/to/policy.csv')
def isAuthorized(req):
result = e.Enforce(req)
if result:
print('Authorized')
else
print('Not authorized!')
isAuthorized(['subject1', 'object1', 'action1'])
isAuthorized(['subject2', 'object2', 'action2'])
# ... and so onIf you've done everything right, you'll see your output without any errors.