From a849c0cc9b0a70f6f56c5d9136df2447f84eb162 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Mon, 3 Nov 2008 23:44:42 +0000 Subject: [PATCH] Fix bug #852 : user manager delete/add object. The privilege enumeration relies on Combo.ItemIndex being the correct priv number which didn't work for privs which were marked as "deleted" and therefore hidden. Deleted access objects are now kept in the object pulldown and marked with a "deleted" icon plus a text postfix " (deleted)". --- source/usermanager.pas | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/source/usermanager.pas b/source/usermanager.pas index acd4eab9..778686de 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -384,13 +384,17 @@ end; } procedure TUserManagerForm.comboUsersChange(Sender: TObject); var - uid, i, Icon: Integer; + uid, i, Icon, PrevSelObject: Integer; u: TUser; OneSelected, Enable: Boolean; t: TNotifyEvent; + pname: WideString; begin lblWarning.Visible := False; uid := comboUsers.ItemIndex; + PrevSelObject := comboObjects.ItemIndex; + if PrevSelObject = -1 then + PrevSelObject := 0; comboObjects.ItemsEx.Clear; OneSelected := uid > -1; Enable := OneSelected; @@ -439,9 +443,6 @@ begin // Display priv objects for i := 0 to u.Privileges.Count - 1 do begin - // Hide deleted priv objects - if u.Privileges[i].Deleted then - Continue; Icon := -1; case u.Privileges[i].DBOType of NODETYPE_DEFAULT: Icon := ICONINDEX_SERVER; @@ -450,10 +451,15 @@ begin NODETYPE_VIEW: Icon := ICONINDEX_VIEW; NODETYPE_COLUMN: Icon := ICONINDEX_FIELD; end; - comboObjects.ItemsEx.AddItem(u.Privileges[i].DBOPrettyKey, Icon, Icon, -1, 0, nil); + pname := u.Privileges[i].DBOPrettyKey; + if u.Privileges[i].Deleted then begin + pname := pname + ' (deleted)'; + Icon := 46; + end; + comboObjects.ItemsEx.AddItem(pname, Icon, Icon, -1, 0, nil); end; - if comboObjects.ItemsEx.Count > 0 then - comboObjects.ItemIndex := 0; + if comboObjects.ItemsEx.Count > PrevSelObject then + comboObjects.ItemIndex := PrevSelObject; comboObjectsChange(Sender); end else begin editUsername.Text := ''; @@ -577,7 +583,7 @@ begin boxPrivs.Checked[i] := priv.SelectedPrivNames.IndexOf(priv.PrivNames[i]) > -1; end; EnableDelete := (priv.DBOType <> NODETYPE_DEFAULT) and - (priv.DBOKey <> '%'); + (priv.DBOKey <> '%') and (not priv.Deleted); end; if comboUsers.ItemIndex > -1 then EnableDelete := EnableDelete and (not Users[comboUsers.ItemIndex].Deleted); @@ -601,7 +607,7 @@ begin u := Users[comboUsers.ItemIndex]; for i := 0 to u.Privileges.Count - 1 do begin NewObj.Delimiter := u.Privileges[i].DBONames.Delimiter; - if u.Privileges[i].DBOKey = NewObj.DelimitedText then begin + if (u.Privileges[i].DBOKey = NewObj.DelimitedText) and (not u.Privileges[i].Deleted) then begin MessageDlg(NewObj.DelimitedText+' already exists.', mtError, [mbOK], 0); comboObjects.ItemIndex := i; comboObjectsChange(Sender);