@object-ui/permissions 0.1.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -0
- package/package.json +4 -4
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# @object-ui/permissions
|
|
2
|
+
|
|
3
|
+
Role-Based Access Control (RBAC) for Object UI — permission guards, field-level access, and policy evaluation.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🔐 **PermissionProvider** - Context provider for permission-aware applications
|
|
8
|
+
- 🛡️ **PermissionGuard** - Conditionally render components based on user permissions
|
|
9
|
+
- 🎣 **usePermissions** - Hook for checking access to actions and resources
|
|
10
|
+
- 📝 **Field-Level Permissions** - Control visibility and editability per field with `useFieldPermissions`
|
|
11
|
+
- 🔍 **Row-Level Security** - Filter data based on permission conditions
|
|
12
|
+
- ⚡ **Permission Evaluator** - Programmatic permission checking engine
|
|
13
|
+
- 🎯 **Type-Safe** - Full TypeScript support with exported types
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @object-ui/permissions
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Peer Dependencies:**
|
|
22
|
+
- `react` ^18.0.0 || ^19.0.0
|
|
23
|
+
- `react-dom` ^18.0.0 || ^19.0.0
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { PermissionProvider, usePermissions, PermissionGuard } from '@object-ui/permissions';
|
|
29
|
+
|
|
30
|
+
function App() {
|
|
31
|
+
return (
|
|
32
|
+
<PermissionProvider
|
|
33
|
+
roles={['admin', 'editor']}
|
|
34
|
+
permissions={{
|
|
35
|
+
orders: { read: true, create: true, update: true, delete: false },
|
|
36
|
+
}}
|
|
37
|
+
>
|
|
38
|
+
<Dashboard />
|
|
39
|
+
</PermissionProvider>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function Dashboard() {
|
|
44
|
+
const { can } = usePermissions();
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<div>
|
|
48
|
+
<h1>Orders</h1>
|
|
49
|
+
<PermissionGuard action="create" resource="orders" fallback={<p>No access</p>}>
|
|
50
|
+
<button>Create Order</button>
|
|
51
|
+
</PermissionGuard>
|
|
52
|
+
{can('delete', 'orders') && <button>Delete</button>}
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## API
|
|
59
|
+
|
|
60
|
+
### PermissionProvider
|
|
61
|
+
|
|
62
|
+
Wraps your application with permission context:
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
<PermissionProvider roles={['editor']} permissions={permissionMap}>
|
|
66
|
+
<App />
|
|
67
|
+
</PermissionProvider>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### usePermissions
|
|
71
|
+
|
|
72
|
+
Hook for checking permissions programmatically:
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
const { can, cannot, roles } = usePermissions();
|
|
76
|
+
|
|
77
|
+
if (can('update', 'orders')) {
|
|
78
|
+
// allow editing
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### useFieldPermissions
|
|
83
|
+
|
|
84
|
+
Hook for field-level permission checks:
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
const { isVisible, isEditable } = useFieldPermissions('orders', 'discount');
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### PermissionGuard
|
|
91
|
+
|
|
92
|
+
Conditionally renders children based on permissions:
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
<PermissionGuard action="delete" resource="orders" fallback={<span>Read only</span>}>
|
|
96
|
+
<DeleteButton />
|
|
97
|
+
</PermissionGuard>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### evaluatePermission
|
|
101
|
+
|
|
102
|
+
Programmatic permission evaluation:
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
import { evaluatePermission } from '@object-ui/permissions';
|
|
106
|
+
|
|
107
|
+
const result = evaluatePermission({
|
|
108
|
+
action: 'update',
|
|
109
|
+
resource: 'orders',
|
|
110
|
+
roles: ['editor'],
|
|
111
|
+
permissions: permissionConfig,
|
|
112
|
+
});
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### createPermissionStore
|
|
116
|
+
|
|
117
|
+
Creates a permission store for advanced use cases:
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
const store = createPermissionStore(permissionConfig);
|
|
121
|
+
store.check('read', 'orders'); // true | false
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@object-ui/permissions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "RBAC permission system for Object UI with object/field/row-level access control, permission guards, and hooks.",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"react": "^18.0.0 || ^19.0.0"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@object-ui/types": "0.
|
|
29
|
+
"@object-ui/types": "3.0.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/react": "
|
|
33
|
-
"react": "
|
|
32
|
+
"@types/react": "19.2.13",
|
|
33
|
+
"react": "19.2.4",
|
|
34
34
|
"typescript": "^5.9.3",
|
|
35
35
|
"vitest": "^4.0.18"
|
|
36
36
|
},
|