0

ユーザー権限を表すトグルのセットがあります。以下は、トグルのリストです。

 Regular permissions
 [x] writeArticles

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

問題は、それらが相互に依存しているということです。または...それらのいくつかは、少なくとも次の方法で依存しています。

  • でしたら、manageAccountPermissionsになりますonmanageAccountson
  • 管理者権限のいずれかがオンに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