83
83
{{ getFullDisplayName(item.mappingDisplayName, item.mappingType) }}
84
84
</td>
85
85
<td class="state-column">
86
- <AclStateButton :state="getState(OC.PERMISSION_READ, item.permissions, item.mask )"
86
+ <AclStateButton :state="getState(OC.PERMISSION_READ, item)"
87
87
:inherited="item.inherited"
88
88
:disabled="loading"
89
89
@update="changePermission(item, OC.PERMISSION_READ, $event)" />
90
90
</td>
91
91
<td class="state-column">
92
- <AclStateButton :state="getState(OC.PERMISSION_UPDATE, item.permissions, item.mask )"
92
+ <AclStateButton :state="getState(OC.PERMISSION_UPDATE, item)"
93
93
:inherited="item.inherited"
94
94
:disabled="loading"
95
95
@update="changePermission(item, OC.PERMISSION_UPDATE, $event)" />
96
96
</td>
97
97
<td v-if="model.type === 'dir'" class="state-column">
98
- <AclStateButton :state="getState(OC.PERMISSION_CREATE, item.permissions, item.mask )"
98
+ <AclStateButton :state="getState(OC.PERMISSION_CREATE, item)"
99
99
:inherited="item.inherited"
100
100
:disabled="loading"
101
101
@update="changePermission(item, OC.PERMISSION_CREATE, $event)" />
102
102
</td>
103
103
<td class="state-column">
104
- <AclStateButton :state="getState(OC.PERMISSION_DELETE, item.permissions, item.mask )"
104
+ <AclStateButton :state="getState(OC.PERMISSION_DELETE, item)"
105
105
:inherited="item.inherited"
106
106
:disabled="loading"
107
107
@update="changePermission(item, OC.PERMISSION_DELETE, $event)" />
108
108
</td>
109
109
<td class="state-column">
110
- <AclStateButton :state="getState(OC.PERMISSION_SHARE, item.permissions, item.mask )"
110
+ <AclStateButton :state="getState(OC.PERMISSION_SHARE, item)"
111
111
:inherited="item.inherited"
112
112
:disabled="loading"
113
113
@update="changePermission(item, OC.PERMISSION_SHARE, $event)" />
161
161
import Vue from 'vue'
162
162
import axios from '@nextcloud/axios'
163
163
import { generateUrl } from '@nextcloud/router'
164
- import AclStateButton from './AclStateButton.vue'
164
+ import AclStateButton, { STATES } from './AclStateButton.vue'
165
165
import Rule from './../model/Rule.js'
166
166
import BinaryTools from './../BinaryTools.js'
167
167
import client from './../client.js'
@@ -211,8 +211,8 @@ export default {
211
211
isAdmin() {
212
212
return this.aclCanManage
213
213
},
214
- isInherited () {
215
- return (permission, permissions, mask) => {
214
+ isNotInherited () {
215
+ return (permission, mask) => {
216
216
return (permission & ~mask) === 0
217
217
}
218
218
},
@@ -222,10 +222,18 @@ export default {
222
222
}
223
223
},
224
224
getState() {
225
- return (permission, permissions, mask) => {
226
- const inheritance = this.isInherited(permission, permissions, mask) << 1
227
- const permitted = this.isAllowed(permission, permissions)
228
- return inheritance | permitted
225
+ return (permission, item) => {
226
+ const permitted = this.isAllowed(permission, item.permissions)
227
+ if (this.isNotInherited(permission, item.mask)) {
228
+ return permitted ? STATES.SELF_ALLOW : STATES.SELF_DENY
229
+ } else {
230
+ const inheritPermitted = this.isAllowed(permission, item.inheritedPermissions)
231
+ if (this.isNotInherited(permission, item.inheritedMask)) {
232
+ return inheritPermitted ? STATES.INHERIT_ALLOW : STATES.INHERIT_DENY
233
+ } else {
234
+ return STATES.INHERIT_DEFAULT
235
+ }
236
+ }
229
237
}
230
238
},
231
239
},
@@ -330,13 +338,13 @@ export default {
330
338
},
331
339
changePermission(item, permission, $event) {
332
340
const index = this.list.indexOf(item)
333
- const inherit = ( $event < 2)
334
- const allow = ( $event & (0b01)) === 1
341
+ const inherit = $event === STATES.INHERIT_ALLOW || $event === STATES.INHERIT_DENY || $event === STATES.INHERIT_DEFAULT
342
+ const allow = $event === STATES.SELF_ALLOW
335
343
const bit = BinaryTools.firstHigh(permission)
336
344
item = item.clone()
337
345
if (inherit) {
338
346
item.mask = BinaryTools.clear(item.mask, bit)
339
- // TODO check if: we can ignore permissions, since they are inherited
347
+ // we can ignore permissions, since they are inherited
340
348
} else {
341
349
item.mask = BinaryTools.set(item.mask, bit)
342
350
if (allow) {
0 commit comments