62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
from utils.casbin import persist
|
|
import os
|
|
|
|
class FileAdapter(persist.Adapter):
|
|
"""the file adapter for Casbin.
|
|
It can load policy from file or save policy to file.
|
|
"""
|
|
_file_path = ""
|
|
|
|
def __init__(self, file_path):
|
|
self._file_path = file_path
|
|
|
|
def load_policy(self, model):
|
|
if not os.path.isfile(self._file_path):
|
|
raise RuntimeError("invalid file path, file path cannot be empty")
|
|
|
|
self._load_policy_file(model)
|
|
|
|
def save_policy(self, model):
|
|
if not os.path.isfile(self._file_path):
|
|
raise RuntimeError("invalid file path, file path cannot be empty")
|
|
|
|
self._save_policy_file(model)
|
|
|
|
def _load_policy_file(self, model):
|
|
with open(self._file_path, "rb") as file:
|
|
line = file.readline()
|
|
while line:
|
|
persist.load_policy_line(line.decode().strip(), model)
|
|
line = file.readline()
|
|
|
|
def _save_policy_file(self, model):
|
|
with open(self._file_path, "w") as file:
|
|
lines = []
|
|
|
|
if "p" in model.model.keys():
|
|
for key, ast in model.model["p"].items():
|
|
for pvals in ast.policy:
|
|
lines.append(key + ", " + ", ".join(pvals))
|
|
|
|
if "g" in model.model.keys():
|
|
for key, ast in model.model["g"].items():
|
|
for pvals in ast.policy:
|
|
lines.append(key + ", " + ", ".join(pvals))
|
|
|
|
for i, line in enumerate(lines):
|
|
if i != len(lines) - 1:
|
|
lines[i] += "\n"
|
|
|
|
file.writelines(lines)
|
|
|
|
def add_policy(self, sec, ptype, rule):
|
|
pass
|
|
|
|
def add_policies(self,sec,ptype,rules):
|
|
pass
|
|
|
|
def remove_policy(self, sec, ptype, rule):
|
|
pass
|
|
|
|
def remove_policies(self,sec,ptype,rules):
|
|
pass |