ユーザー権限を表すトグルのセットがあります。以下は、トグルのリストです。
Regular permissions
[x] writeArticles
Administrative permissions
[x] accessDash
[ ] manageBlog
[ ] manageSpecialPages
[x] manageAccounts
[ ] manageAccountPermissions
問題は、それらが相互に依存しているということです。または...それらのいくつかは、少なくとも次の方法で依存しています。
- でしたら、
manageAccountPermissions
になりますon
manageAccounts
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,
} );
};
ここで使用する最も簡単で論理的な方法は何ですか? どうもありがとうございました!
上記のコードを説明するためのペンを書きました(少し変更してあります)。