diff --git a/README.md b/README.md index d5b7b76..baf94b1 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ export default new Router({ name: 'notfound', component: NotFound, meta: { - rule: '*' + rule: ['*'] } } ] @@ -101,7 +101,7 @@ export default new Router({ ``` More details: -- Define `rule` meta for link a route with a permission, your can use name of the global rule e.g `isPublic` or use `AclRule` for create new rule orr use `*` for define allowed route. +- Define `rule` meta for link a route with a permission, your can use name of the global rule e.g `isPublic` or use `AclRule` for create new rule or use `[*]` for define allowed route. For finish, in your `main.js` import the `acl` and pass to Vue root instance: diff --git a/example/src/App.vue b/example/src/App.vue index 26b0c31..58053f9 100644 --- a/example/src/App.vue +++ b/example/src/App.vue @@ -10,16 +10,61 @@ -

Current permission: {{ $acl.get }}

+

+ Current permission: {{ $acl.get }}. + This span can be seen if have 'write' permission. +

-
-

Page content:

- +

Always Ture +

+ +
+ + + +
+ +

Current check condition is: '{{ checkRuleInfo }}'

+

Check result is: '{{ $acl.check(checkRuleVariable) }}'

+ +
+

+ Page content: +

+ diff --git a/example/src/router.js b/example/src/router.js index e4a76a7..b70fbe2 100644 --- a/example/src/router.js +++ b/example/src/router.js @@ -5,6 +5,7 @@ import { AclRule } from '../../source' import Public from './views/Public.vue' import Admin from './views/Admin.vue' import NotFound from './views/NotFound.vue' +import Asterisk from './views/Asterisk.vue' Vue.use(Router) @@ -33,6 +34,22 @@ export default new Router({ meta: { rule: '*' } - } + }, + { + path: '/asterisk-invalid', + name: 'asterisk', + component: Asterisk, + meta: { + rule: '*' + } + }, + { + path: '/asterisk-valid', + name: 'asterisk', + component: Asterisk, + meta: { + rule: ['*'] + } + }, ] }) diff --git a/example/src/views/Asterisk.vue b/example/src/views/Asterisk.vue new file mode 100644 index 0000000..0aa7a02 --- /dev/null +++ b/example/src/views/Asterisk.vue @@ -0,0 +1,5 @@ + diff --git a/source/checker.js b/source/checker.js index 6f5c749..cd13150 100644 --- a/source/checker.js +++ b/source/checker.js @@ -1,8 +1,9 @@ +import { AclRule } from './index' /** * Test a rule with a permission group * @param {Array} current current permissions - * @param {Array} rules rule to test + * @param {Array|AclRule} rules rule to test * @return {boolean} valided rule */ export const testPermission =(current, rules) => { diff --git a/source/mixin.js b/source/mixin.js index 1d4f0f6..339d83a 100644 --- a/source/mixin.js +++ b/source/mixin.js @@ -2,7 +2,7 @@ import Vue from 'vue' import { testPermission } from './checker' - +import { AclRule } from './index' @@ -84,24 +84,28 @@ export const register = (initial, acceptLocalRules, globalRules, router, notfoun /** * Check if rule is valid currently - * @param {string} ruleName rule name + * @param {string|Array|AclRule} rule rule */ - check(ruleName) { + check(rule) { const hasNot = not not = false - if (ruleName in globalRules) { - const result = testPermission(this.get, globalRules[ruleName]) + if (typeof rule === 'string' && rule in globalRules) { + const result = testPermission(this.get, globalRules[rule]) return hasNot ? !result : result } - - if (ruleName in self) { + if (typeof rule === 'string' && rule in self) { if (!acceptLocalRules) { return console.error('[vue-acl] acceptLocalRules is not enabled') } - const result = testPermission(this.get, self[ruleName]) + const result = testPermission(this.get, self[rule]) + return hasNot ? !result : result + } + + if (Array.isArray(rule) || rule instanceof AclRule) { + const result = testPermission(this.get, rule) return hasNot ? !result : result }