我正在計劃重構授權各種視圖/視圖模型方法/命令的一些遺留代碼。我厭倦了看下面這段代碼。我想用戰略模式。有什麼建議麼 ?什麼是在以下場景中使用的最佳設計模式
public static bool AuthorizeGeneral(string rule)
{
switch (rule)
{
case RuleFilterNoteType:
return
isInRoleSkipManger() ||
isInRole(RoleNegotiationManager) || isInRole(RoleNegotiationCollector) ||
isInRole(RoleLitigationManager) || isInRole(RoleRecoveryVicePresident) || isInRole(RoleSkipCollector) ||
isInRole(RoleLitigationAdministrator) || isInRole(RoleBankruptcyManager) ||
isInRole(RoleBankruptcyAdministrator);
case CanEditExceptionQueueRule:
return
isInRole(RoleLitigationManager) || isInRole(RoleBankruptcyManager) || isInRole(RoleCOO) || isInRole(RoleEVP) ||
isInRole(RoleRecoveryVicePresident) || isInRole(RoleNegotiationManager);
...
case #150
....
case #200
}
}
這看起來很有趣:https://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/。如果您將規則抽象爲字符串以外的其他字符並傳入相關角色中,這會不會很容易?我認爲這可能會大幅縮水。沒有模式需要;只是更智能的對象封裝和抽象。字符串並不比原語好得多。 – duffymo
另外,如果它仍在使用舊的成員資格和角色提供者...請考慮使用WIF或Identity Framework切換到聲明。然後使用索賠授權規則來授予或拒絕訪問的東西。 https://msdn.microsoft.com/en-us/library/ms729851(v=vs.110).aspx –
如果問題是關於如何可能想出一個比開關箱怪物更好的方法,我建議看看[lostechies.com/derickbailey/2010/10/07/a-less-ugly-switch-statement-for-c](https://lostechies.com/derickbailey/2010/10/07/a稀少-難看-switch語句換C /)。 – kayess