-
-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add pip install pycasbin (#175)
* feat: add pip install pycasbin Signed-off-by: stonex <[email protected]> * fix: fix casbin-cpp url and remove pytest requirement Signed-off-by: stonex <[email protected]> * docs: remove the cmake install pycasbin and add pip install pycasbin module Signed-off-by: stonex <[email protected]>
- Loading branch information
1 parent
00d8414
commit 42f6bfb
Showing
26 changed files
with
969 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -361,3 +361,6 @@ MigrationBackup/ | |
cmake-build/ | ||
xcode-build/ | ||
cmake-build*/ | ||
|
||
# pip | ||
*.egg-info |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
include README.md LICENSE | ||
graft include | ||
graft casbin | ||
graft pycasbin/ | ||
global-include CMakeLists.txt *.cmake |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
# Copyright 2021 The casbin Authors. All Rights Reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
set(SOURCES | ||
src/main.cpp | ||
src/py_cached_enforcer.cpp | ||
src/py_enforcer.cpp | ||
src/py_model.cpp | ||
src/py_config.cpp | ||
src/py_synced_enforcer.cpp | ||
src/py_adapter.cpp | ||
) | ||
|
||
set(HEADERS | ||
src/py_casbin.h | ||
) | ||
|
||
add_library(pycasbin MODULE ${SOURCES} ${HEADERS}) | ||
|
||
target_include_directories(pycasbin PUBLIC ${CASBIN_INCLUDE_DIR}) | ||
|
||
set_target_properties(pycasbin PROPERTIES | ||
CXX_STANDARD 17 | ||
) | ||
|
||
# For in-source versioning macro | ||
add_definitions(-DPY_CASBIN_VERSION=${PY_CASBIN_VERSION}) | ||
|
||
target_link_libraries(pycasbin | ||
PRIVATE | ||
pybind11::module | ||
pybind11::lto | ||
pybind11::windows_extras | ||
casbin | ||
nlohmann_json::nlohmann_json | ||
) | ||
|
||
pybind11_extension(pycasbin) | ||
pybind11_strip(pycasbin) | ||
# For testing | ||
# install( | ||
# TARGETS pycasbin | ||
# LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/tests/python | ||
# ) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
## Language Bindings for `casbin-cpp` | ||
|
||
At present, `casbin-cpp` provides language bindings for Python, we named it `pycasbin`. | ||
|
||
## Python Bindings | ||
|
||
### Use `pip` install the `pycasbin` module | ||
|
||
It is assumed you have `CMake >=v3.19` and `Python >= 3.6` installed. Current `pycasbin` only support `pip` install in local machine. | ||
|
||
1. Clone/download the project: | ||
```bash | ||
git clone https://github.com/casbin/casbin-cpp.git | ||
``` | ||
|
||
2. Update `wheel setuptools`: | ||
```bash | ||
python -m pip install --upgrade wheel setuptools | ||
``` | ||
|
||
3. Install the `pycasbin` module: | ||
```bash | ||
cd casbin-cpp && pip install --verbose . | ||
``` | ||
|
||
Now, you're ready to go! | ||
### Usage | ||
It is assumed that you have `pycasbin` module correctly installed on your system. | ||
First, we import the `pycasbin` module to a python source file: | ||
```python | ||
import pycasbin as casbin | ||
``` | ||
Suppose we want a function to check authorization of a request: | ||
```python | ||
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: | ||
```python | ||
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`: | ||
```python | ||
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: | ||
```python | ||
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`. | ||
|
||
#### Summary | ||
|
||
This sums up the basic usage of `pycasbin` module: | ||
|
||
```python | ||
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 on | ||
``` | ||
If you've done everything right, you'll see your output | ||
without any errors. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* Copyright 2021 The casbin Authors. All Rights Reserved. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
* This is the main file for python bindings workflow | ||
*/ | ||
|
||
#include <pybind11/pybind11.h> | ||
#include "py_casbin.h" | ||
|
||
namespace py = pybind11; | ||
|
||
PYBIND11_MODULE(pycasbin, m) { | ||
m.doc() = R"pbdoc( | ||
Casbin Authorization Library | ||
----------------------- | ||
.. currentmodule:: pycasbin | ||
.. autosummary:: | ||
:toctree: _generate | ||
Enforcer | ||
)pbdoc"; | ||
|
||
bindPyEnforcer(m); | ||
bindPyCachedEnforcer(m); | ||
bindPyModel(m); | ||
bindPyConfig(m); | ||
bindPySyncedEnforcer(m); | ||
bindPyAdapter(m); | ||
|
||
m.attr("__version__") = PY_CASBIN_VERSION; | ||
} |
Oops, something went wrong.