我有一组代表用户权限的切换。以下是切换列表:
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,
} );
};
在这里使用最简单和最合乎逻辑的方法是什么?非常感谢!
我写了一支笔来说明上面的代码(几乎没有修改)