|
|
@@ -1,5 +1,4 @@
|
|
|
-import { Ability } from '@casl/ability'
|
|
|
-import { initialAbility } from './config'
|
|
|
+import { createMongoAbility, AbilityBuilder } from '@casl/ability'
|
|
|
|
|
|
// Read ability from localStorage
|
|
|
// * Handles auto fetching previous abilities if already logged in user
|
|
|
@@ -8,46 +7,29 @@ import { initialAbility } from './config'
|
|
|
const userData = JSON.parse(localStorage.getItem('userData'))
|
|
|
const existingAbility = userData ? userData.ability : null
|
|
|
|
|
|
+const {
|
|
|
+ can,
|
|
|
+ cannot,
|
|
|
+ build,
|
|
|
+ rules,
|
|
|
+} = new AbilityBuilder(createMongoAbility)
|
|
|
+
|
|
|
export function getExistingAbility(userAbility) {
|
|
|
switch (userAbility) {
|
|
|
case 'visitor':
|
|
|
- return [
|
|
|
- {
|
|
|
- action: 'read',
|
|
|
- subject: 'basic',
|
|
|
- },
|
|
|
- ]
|
|
|
+ can('read', 'all')
|
|
|
+ cannot('read', 'management')
|
|
|
+ break
|
|
|
|
|
|
case 'manager':
|
|
|
- return [
|
|
|
- {
|
|
|
- action: 'read',
|
|
|
- subject: 'basic',
|
|
|
- },
|
|
|
- {
|
|
|
- action: 'read',
|
|
|
- subject: 'management',
|
|
|
- },
|
|
|
- ]
|
|
|
+ can('read', 'all')
|
|
|
+ break
|
|
|
|
|
|
default:
|
|
|
- return null
|
|
|
+ break
|
|
|
}
|
|
|
+ return rules
|
|
|
}
|
|
|
|
|
|
-// const { can, cannot, build } = new AbilityBuilder(createMongoAbility)
|
|
|
-// can('read', 'all')
|
|
|
-
|
|
|
-// switch (userData.ability) {
|
|
|
-// case 'manager':
|
|
|
-// can('read', 'all')
|
|
|
-// break
|
|
|
-
|
|
|
-// default:
|
|
|
-// can('read', 'all')
|
|
|
-// cannot('read', 'permission')
|
|
|
-// break
|
|
|
-// }
|
|
|
-// const ability = build()
|
|
|
-
|
|
|
-export default new Ability(getExistingAbility(existingAbility) || initialAbility)
|
|
|
+getExistingAbility(existingAbility)
|
|
|
+export default build()
|