blob: a87b680f6de992ac610696a8dc11a2b082f9773a [file] [log] [blame]
import React, { useEffect, useState } from "react";
import { newEnforcer, Model, MemoryAdapter } from 'casbin-core';
const model = new Model(`
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
`);
const adapter = new MemoryAdapter(`
p, alice, data1, read
p, bob, data2, write
`);
const Enforcer = ( { sub, obj, act } ) => {
const [loading, setLoading] = useState(false);
const [result, setResult] = useState(false);
const [enforcer, setEnforcer] = useState(null);
useEffect(() => {
console.log("Enforcer useEffect");
newEnforcer(model, adapter).then(e => {
setEnforcer(e);
});
}, []);
useEffect(() => {
if (enforcer) {
setLoading(true);
enforcer.enforce(sub, obj, act).then((res) => setResult(res)).finally(() => setLoading(false));
}
}, [sub, obj, act, enforcer]);
return (
<>
<h1>Casbin</h1>
<h2>Request ({sub}, {obj}, {act})</h2>
{
loading ?
<h3>Enforcing...</h3>
:
<h3 data-testid="enforce-result">{ result === true ? "Allowed" : "Denied" }</h3>
}
</>
);
}
export default Enforcer;