@backstage-community/plugin-rbac-backend
Version:
53 lines (49 loc) • 1.69 kB
JavaScript
;
var casbin = require('casbin');
class LowercaseFileAdapter extends casbin.FileAdapter {
constructor(filePath, logger) {
super(filePath);
this.logger = logger;
}
async loadPolicy(model) {
if (!this.filePath) {
return;
}
await this.loadLowercasePolicyFile(model, casbin.Helper.loadPolicyLine);
}
transformLineToLowercaseGroupsUsers(line) {
if (line.trim().startsWith("g")) {
const policyArray = line.split(",");
if (policyArray.length >= 1 && policyArray[0].trim().startsWith("g")) {
policyArray[1] = policyArray[1].toLocaleLowerCase("en-US");
}
return policyArray.join(",");
}
return line;
}
async loadLowercasePolicyFile(model, handler) {
const bodyBuf = await (this.fs ? this.fs : casbin.mustGetDefaultFileSystem()).readFileSync(this.filePath);
const lines = bodyBuf.toString().split("\n");
lines.forEach((line, index) => {
const trimmed = line.replace(/\r$/, "").trim();
if (!trimmed || trimmed.startsWith("#")) {
return;
}
const lineNumber = index + 1;
try {
const lowercasedLine = this.transformLineToLowercaseGroupsUsers(trimmed);
handler(lowercasedLine, model);
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
this.logger?.debug(
`Skipping invalid policy line ${lineNumber} in ${this.filePath} while loading Casbin model: ${message}; line=${trimmed.slice(
0,
120
)}`
);
}
});
}
}
exports.LowercaseFileAdapter = LowercaseFileAdapter;
//# sourceMappingURL=lowercase-file-adapter.cjs.js.map