access control by role plus by person in orgsettings
This commit is contained in:
@@ -5048,6 +5048,10 @@ export const MockStoreProvider = ({ children }) => {
|
||||
subcontractor_tasks: { label: 'Subcontractor Tasks', actions: ['view','assign','receive'] },
|
||||
};
|
||||
|
||||
// Per-user permission overrides: grant or deny specific module+action regardless of role
|
||||
// Shape: [{ userId, moduleKey, action, effect: 'grant' | 'deny' }]
|
||||
const [userPermissionOverrides, setUserPermissionOverrides] = useState([]);
|
||||
|
||||
const [roleCommissionOverrides, setRoleCommissionOverrides] = useState([
|
||||
{ roleKey: 'SALES_REP', enabled: true, type: 'percent_net', rate: 5 },
|
||||
{ roleKey: 'CANVASSER', enabled: true, type: 'flat', rate: 300 },
|
||||
@@ -5306,6 +5310,21 @@ export const MockStoreProvider = ({ children }) => {
|
||||
[moduleKey]: { ...prev[moduleKey], [roleKey]: actions },
|
||||
}));
|
||||
},
|
||||
userPermissionOverrides,
|
||||
setUserPermissionOverride: (userId, moduleKey, action, effect) => {
|
||||
setUserPermissionOverrides(prev => {
|
||||
const filtered = prev.filter(o => !(o.userId === userId && o.moduleKey === moduleKey && o.action === action));
|
||||
return [...filtered, { userId, moduleKey, action, effect }];
|
||||
});
|
||||
},
|
||||
removeUserPermissionOverride: (userId, moduleKey, action) => {
|
||||
setUserPermissionOverrides(prev =>
|
||||
prev.filter(o => !(o.userId === userId && o.moduleKey === moduleKey && o.action === action))
|
||||
);
|
||||
},
|
||||
clearUserPermissionOverrides: (userId) => {
|
||||
setUserPermissionOverrides(prev => prev.filter(o => o.userId !== userId));
|
||||
},
|
||||
roleCommissionOverrides,
|
||||
setRoleCommissionOverride: (override) => {
|
||||
setRoleCommissionOverrides(prev => {
|
||||
|
||||
Reference in New Issue
Block a user