0

我有一组代表用户权限的切换。以下是切换列表:

 Regular permissions
 [x] writeArticles

 Administrative permissions
 [x] accessDash
 [ ] manageBlog
 [ ] manageSpecialPages
 [x] manageAccounts
 [ ] manageAccountPermissions

问题是它们相互依赖,或者......其中一些,至少,以下列方式:

  • 如果manageAccountPermissionsonmanageAccounts将是on
  • 如果启用了任何管理权限,accessDash则将是on
  • 如果accessDash打开,writeArticles将是on

现在事情是相互有效的,所以:

  • 如果manageAccounts关闭则manageAccountPermissions关闭
  • 如果accessDash关闭,则所有管理权限都会关闭
  • 如果writeArticles关闭则accessDash关闭(隐式地,所有管理权限都关闭)

到目前为止,这是我的代码。这完全是废话,似乎只适用于某些情况,据我所知,速度也很慢:

handleToggle = ( event, toggled ) => {
    const targetId = event.target.id;
    const { permissions } = this.state;

    let newPermissions = {
        ...permissions,
        [targetId]: toggled,
    };

    if ( newPermissions.writeArticles === false ) {
        newPermissions.accessDash = false;
    }

    const activeAdminPerm =
        filter( newPermissions, ( o, k ) => o === true && k !== 'writeArticles' );
    if ( Object.size( activeAdminPerm ) &&
        targetId !== 'accessDash' &&
        targetId !== 'writeArticles' ) {
        newPermissions.writeArticles = true;
        newPermissions.accessDash = true;
    }

    if ( newPermissions.accessDash === false || !newPermissions.writeArticles ) {
        for ( let key in permissions ) {
            if ( permissions.hasOwnProperty( key ) ) {
                if ( key !== 'writeArticles' ) {
                    newPermissions[key] = false;
                }
            }
        }
    }

    this.setState( {
        permissions: newPermissions,
    } );
};

在这里使用最简单和最合乎逻辑的方法是什么?非常感谢!


我写了一支笔来说明上面的代码(几乎没有修改)

4

0 回答 0