-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
FileAdapter.lua
112 lines (97 loc) · 2.85 KB
/
FileAdapter.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
--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.
require "src/util/Util"
require "src/persist/Adapter"
--[[
* FileAdapter is the file adapter for Casbin.
* It can load policy from file or save policy to file.
]]
FileAdapter = {
filePath,
readOnly = false
}
FileAdapter = setmetatable(FileAdapter,Adapter)
--[[
* FileAdapter:new(filePath) returns a new FileAdapter
*
* @param filePath the path of the policy file.
]]
function FileAdapter:new(filePath)
local o = {}
setmetatable(o, self)
self.__index = self
o.filePath = filePath
return o
end
--[[
* loadPolicy loads all policy rules from the storage.
]]
function FileAdapter:loadPolicy(model)
local f = assert(io.open(self.filePath,"r"))
if f then
for line in f:lines() do
loadPolicyLine(line, model)
end
end
f:close()
end
--[[
* savePolicy saves all policy rules to the storage.
]]
function FileAdapter:savePolicy(model, saveToFilePath)
local filePath = saveToFilePath
if not filePath then filePath = self.filePath end
local f = assert(io.open(filePath,"w"))
if model.model["p"] then
for ptype, ast in pairs(model.model["p"]) do
for _, rule in pairs(ast.policy) do
local str = ptype .. ", " .. Util.arrayToString(rule) .. "\n"
f:write(str)
end
end
end
if model.model["g"] then
for ptype, ast in pairs(model.model["g"]) do
for _, rule in pairs(ast.policy) do
local str = ptype .. ", " .. Util.arrayToString(rule) .. "\n"
f:write(str)
end
end
end
f:close()
end
--[[
* addPolicy adds a policy rule to the storage.
]]
function FileAdapter:addPolicy(sec, ptype, rule)
error("not implemented")
end
--[[
* removePolicy removes a policy rule from the storage.
]]
function FileAdapter:removePolicy(sec, ptype, rule)
error("not implemented")
end
--[[
* updatePolicy updates a policy rule from the storage
]]
function FileAdapter:updatePolicy(sec, ptype, oldRule, newRule)
error("not implemented")
end
--[[
* removeFilteredPolicy removes policy rules that match the filter from the storage.
]]
function FileAdapter:removeFilteredPolicy(sec, ptype, fieldIndex, fieldValues)
error("not implemented")
end