Упростить коллекцию областей - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно упростить области действия на основе данных

Я нашел библиотеку, но она не охватывает мою проблему

https://www.npmjs.com/package/@authx / области действия

Вот упрощенная функция из этой библиотеки

function simplify(collection) {
    return collection.reduce(s, []).reduceRight(s, []).sort();
}

Пример моей области видимости:

const scopes = {
  'context1.a:action1.update':      [ 'superAdmin', 'admin'],
  'context1.a:action1.delete':      [ 'superAdmin'],
  'context1.a:action1.retrieve':    [ 'superAdmin', 'user', 'admin'],
  'context2.a:action1.create':      [ 'superAdmin'],
  'context2.a:action1.update':      [ 'superAdmin', 'admin'],
  'context2.a:action1.delete':      [ 'superAdmin'],
  'context2.a:action1.retrieve':    [ 'superAdmin', 'user'],
  'context2.a:action2.create':      [ 'superAdmin', 'admin'],
  'context2.b:action2.create':      [ 'superAdmin', 'admin'],
  'context2.b:action2.update':      [ 'superAdmin', 'admin'],
  'context2.b:action2.delete':      [ 'superAdmin', 'admin'],
  'context2.b:action2.retrieve':    [ 'superAdmin', 'admin'],
  'context3:action2.read':          [ 'superAdmin', 'user', 'admin'],
  'context3:action2.write':         [ 'superAdmin', 'user', 'admin'],
  'context4:action3.get':           [ 'superAdmin', 'admin'],
  'context4:action3.take':          [ 'superAdmin', 'admin'],
  'context4:action4.delete':        [ 'superAdmin', 'admin'],
  'context5.test1:action5.get':     [ 'superAdmin', 'user'],
  'context5.test1:action6.post':    [ 'superAdmin', 'user'],
  'context5.test2:action5.get':     [ 'superAdmin', 'user'],
  'context5.test3:action6.post':    [ 'superAdmin', 'user'],
}

Как я могу упростить это так?

const  simplifyScopes = {
  superAdmin: [
    '**:**'
  ],
  admin: [
    'context1.*:action1.update',
    'context1.*:action1.retrieve',
    'context2.*:action1.update',
    'context2.*:action1.retrieve',
    'context2.*:action2.*',
    'context3:action2.*',
    'context4:**'
  ],
  user: [
    'context1.a:action1.retrieve',
    'context2.a:action1.retrieve',
    'context3:action2.*',
    'context5.*:**',
  ],
}

...