微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 根据权限名称过滤用户

我有一组具有权限数组的用户.我想过滤掉拥有运算符权限的用户.

用户列表

[
  {
    EmailAddress: "[email protected]",
    FullName: "Test User",
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 202,
        PermissionName: "operator",
        roleName: "operator",
        roleid: 8,
      }
    ],
    UserID: 105,
  },
  {
    EmailAddress: "[email protected]",
    FullName: "tested User",
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 205,
        PermissionName: "admin",
        roleName: "Admin",
        roleid: 5,
      }
    ],
    UserID: 101,
  },
]

我试过这个,但它并没有让所有拥有运算符权限的用户

data.filter(x => {
    for (const permission of x.Permissions) {
        return permission['PermissionName'] === 'boc-operator';
    }
});

解决方法:

您可以执行以下操作:

const data = [
  {
    EmailAddress: '[email protected]',
    FullName: 'Test User',
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 202,
        PermissionName: 'operator',
        roleName: 'operator',
        roleid: 8,
      },
    ],
    UserID: 105,
  },
  {
    EmailAddress: '[email protected]',
    FullName: 'tested User',
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 205,
        PermissionName: 'admin',
        roleName: 'Admin',
        roleid: 5,
      },
    ],
    UserID: 101,
  },
];
const hasPermission = (permissionName) => (item) =>
  item.Permissions.some(
    (permission) =>
      permission.PermissionName === permissionName,
  );
console.log(data.filter(hasPermission('admin')))

如果要对多个字段进行过滤,可以轻松扩展:

const data = [
  {
    EmailAddress: '[email protected]',
    FullName: 'Test User',
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 202,
        PermissionName: 'operator',
        roleName: 'operator',
        roleid: 8,
      },
    ],
    UserID: 105,
  },
  {
    EmailAddress: '[email protected]',
    FullName: 'tested User',
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 205,
        PermissionName: 'admin',
        roleName: 'Admin',
        roleid: 5,
      },
    ],
    UserID: 101,
  },
];
const hasPermission = (permissionName) => (item) =>
  item.Permissions.some(
    (permission) =>
      permission.PermissionName === permissionName,
  );
const emailContains = (value) => (item) =>
  item.EmailAddress.includes(value);
const createFilter = (...filterFunctions) => (item) =>
  filterFunctions.reduce(
    (result, fn) => result && fn(item),
    true,
  );
console.log(
  data.filter(
    createFilter(
      hasPermission('admin'),
      emailContains('tested'),
    ),
  )
);

最后;从对象获取属性的示例是在它自己的函数中.现在你有的功能只能实现一件事,并且可以在很多方面重复使用:

const data = [
  {
    EmailAddress: '[email protected]',
    FullName: 'Test User',
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 202,
        PermissionName: 'operator',
        roleName: 'operator',
        roleid: 8,
      },
    ],
    UserID: 105,
  },
  {
    EmailAddress: '[email protected]',
    FullName: 'tested User',
    Permissions: [
      {
        PermissionData: null,
        PermissionID: 205,
        PermissionName: 'admin',
        roleName: 'Admin',
        roleid: 5,
      },
    ],
    UserID: 101,
  },
];
const getPermissions = (item) => item.Permissions;
const getPermissionName = (item) => item.PermissionName;
const getEmailAddress = (item) => item.EmailAddress;
const isIn = (comparer, getter) => (value) => (item) =>
  getter(item).some(comparer(value));
const isSame = (getter) => (value) => (item) =>
  getter(item) === value;
const contains = (getter) => (value) => (item) =>
  getter(item).includes(value);
const hasPermission = isIn(
  isSame(getPermissionName),
  getPermissions,
);
const emailContains = contains(getEmailAddress);
const createFilter = (...filterFunctions) => (item) =>
  filterFunctions.reduce(
    (result, fn) => result && fn(item),
    true,
  );
console.log(
  data.filter(
    createFilter(
      hasPermission('admin'),
      emailContains('tested'),
    ),
  ),
);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐