feat(api): RBAC Phase 2 - row-level data scoping for groomer role #121

Closed
groombook-engineer[bot] wants to merge 17 commits from feature/gro-48-rbac-row-level into main
4 changed files with 4 additions and 31 deletions
Showing only changes of commit cd5feb1a14 - Show all commits
-8
View File
@@ -55,14 +55,6 @@ test.describe("DevLoginSelector", () => {
expect(JSON.parse(devUser!)).toMatchObject({ type: "client", id: "client-1", name: "Carol Client" });
});
test("skip login removes dev-user and navigates to /admin", async ({ page }) => {
await page.goto("/login");
await page.getByText("Continue as default dev user").click();
await expect(page).toHaveURL("/admin");
const devUser = await page.evaluate(() => localStorage.getItem("dev-user"));
expect(devUser).toBeNull();
});
test("no users available shows empty sections", async ({ page }) => {
await page.route("**/api/dev/users", (route) =>
route.fulfill({ json: { staff: [], clients: [] } })
+2 -2
View File
@@ -141,8 +141,8 @@ export function App() {
.catch(() => setAuthDisabled(false));
}, []);
// Show login selector page
if (location.pathname === "/login") {
// Show login selector page (only in development)
if (import.meta.env.DEV && location.pathname === "/login") {
return <DevLoginSelector />;
}
-20
View File
@@ -36,11 +36,6 @@ export function DevLoginSelector() {
navigate(type === "staff" ? "/admin" : "/");
}
function skipLogin() {
localStorage.removeItem("dev-user");
navigate("/admin");
}
if (loading) {
return (
<div style={containerStyle}>
@@ -94,11 +89,6 @@ export function DevLoginSelector() {
))}
</div>
<div style={{ marginTop: "1.5rem", textAlign: "center" }}>
<button onClick={skipLogin} style={skipButtonStyle}>
Continue as default dev user
</button>
</div>
</div>
</div>
);
@@ -157,13 +147,3 @@ const userButtonStyle: React.CSSProperties = {
textAlign: "left",
transition: "border-color 0.15s, background 0.15s",
};
const skipButtonStyle: React.CSSProperties = {
padding: "0.5rem 1.25rem",
border: "1px solid #d1d5db",
borderRadius: 6,
background: "transparent",
cursor: "pointer",
fontSize: 13,
color: "#6b7280",
};
+2 -1
View File
@@ -7,7 +7,8 @@
"jsx": "react-jsx",
"strict": true,
"noUncheckedIndexedAccess": true,
"skipLibCheck": true
"skipLibCheck": true,
"types": ["vite/client"]
},
"include": ["src"]
}