mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 11:17:57 +08:00
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)".
This commit is contained in:
@ -384,13 +384,17 @@ end;
|
|||||||
}
|
}
|
||||||
procedure TUserManagerForm.comboUsersChange(Sender: TObject);
|
procedure TUserManagerForm.comboUsersChange(Sender: TObject);
|
||||||
var
|
var
|
||||||
uid, i, Icon: Integer;
|
uid, i, Icon, PrevSelObject: Integer;
|
||||||
u: TUser;
|
u: TUser;
|
||||||
OneSelected, Enable: Boolean;
|
OneSelected, Enable: Boolean;
|
||||||
t: TNotifyEvent;
|
t: TNotifyEvent;
|
||||||
|
pname: WideString;
|
||||||
begin
|
begin
|
||||||
lblWarning.Visible := False;
|
lblWarning.Visible := False;
|
||||||
uid := comboUsers.ItemIndex;
|
uid := comboUsers.ItemIndex;
|
||||||
|
PrevSelObject := comboObjects.ItemIndex;
|
||||||
|
if PrevSelObject = -1 then
|
||||||
|
PrevSelObject := 0;
|
||||||
comboObjects.ItemsEx.Clear;
|
comboObjects.ItemsEx.Clear;
|
||||||
OneSelected := uid > -1;
|
OneSelected := uid > -1;
|
||||||
Enable := OneSelected;
|
Enable := OneSelected;
|
||||||
@ -439,9 +443,6 @@ begin
|
|||||||
|
|
||||||
// Display priv objects
|
// Display priv objects
|
||||||
for i := 0 to u.Privileges.Count - 1 do begin
|
for i := 0 to u.Privileges.Count - 1 do begin
|
||||||
// Hide deleted priv objects
|
|
||||||
if u.Privileges[i].Deleted then
|
|
||||||
Continue;
|
|
||||||
Icon := -1;
|
Icon := -1;
|
||||||
case u.Privileges[i].DBOType of
|
case u.Privileges[i].DBOType of
|
||||||
NODETYPE_DEFAULT: Icon := ICONINDEX_SERVER;
|
NODETYPE_DEFAULT: Icon := ICONINDEX_SERVER;
|
||||||
@ -450,10 +451,15 @@ begin
|
|||||||
NODETYPE_VIEW: Icon := ICONINDEX_VIEW;
|
NODETYPE_VIEW: Icon := ICONINDEX_VIEW;
|
||||||
NODETYPE_COLUMN: Icon := ICONINDEX_FIELD;
|
NODETYPE_COLUMN: Icon := ICONINDEX_FIELD;
|
||||||
end;
|
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;
|
end;
|
||||||
if comboObjects.ItemsEx.Count > 0 then
|
if comboObjects.ItemsEx.Count > PrevSelObject then
|
||||||
comboObjects.ItemIndex := 0;
|
comboObjects.ItemIndex := PrevSelObject;
|
||||||
comboObjectsChange(Sender);
|
comboObjectsChange(Sender);
|
||||||
end else begin
|
end else begin
|
||||||
editUsername.Text := '';
|
editUsername.Text := '';
|
||||||
@ -577,7 +583,7 @@ begin
|
|||||||
boxPrivs.Checked[i] := priv.SelectedPrivNames.IndexOf(priv.PrivNames[i]) > -1;
|
boxPrivs.Checked[i] := priv.SelectedPrivNames.IndexOf(priv.PrivNames[i]) > -1;
|
||||||
end;
|
end;
|
||||||
EnableDelete := (priv.DBOType <> NODETYPE_DEFAULT) and
|
EnableDelete := (priv.DBOType <> NODETYPE_DEFAULT) and
|
||||||
(priv.DBOKey <> '%');
|
(priv.DBOKey <> '%') and (not priv.Deleted);
|
||||||
end;
|
end;
|
||||||
if comboUsers.ItemIndex > -1 then
|
if comboUsers.ItemIndex > -1 then
|
||||||
EnableDelete := EnableDelete and (not Users[comboUsers.ItemIndex].Deleted);
|
EnableDelete := EnableDelete and (not Users[comboUsers.ItemIndex].Deleted);
|
||||||
@ -601,7 +607,7 @@ begin
|
|||||||
u := Users[comboUsers.ItemIndex];
|
u := Users[comboUsers.ItemIndex];
|
||||||
for i := 0 to u.Privileges.Count - 1 do begin
|
for i := 0 to u.Privileges.Count - 1 do begin
|
||||||
NewObj.Delimiter := u.Privileges[i].DBONames.Delimiter;
|
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);
|
MessageDlg(NewObj.DelimitedText+' already exists.', mtError, [mbOK], 0);
|
||||||
comboObjects.ItemIndex := i;
|
comboObjects.ItemIndex := i;
|
||||||
comboObjectsChange(Sender);
|
comboObjectsChange(Sender);
|
||||||
|
Reference in New Issue
Block a user