download userman.pas
Language: Delphi
LOC: 335
Project Info
IBAccess
Server: SourceForge
Type: cvs
...ibaccess\ibaccess\ibaccess\
   aboutform.pas
   aboutform.xfm
   altergenerator.pas
   altergenerator.xfm
   backupdatabase.pas
   backupdatabase.xfm
   borra.bat
   databaseform.pas
   databaseform.xfm
   databasestat.pas
   databasestat.xfm
   delbase.pas
   delbase.xfm
   diaser.pas
   diaser.xfm
   domadvanced.pas
   domadvanced.xfm
   fieldprop.pas
   fieldprop.xfm
   fmonitor.pas
   fmonitor.xfm
   ibaccess.cfg
   ibaccess.conf
   ibaccess.dof
   ibaccess.dpr
   ibaccess.drc
   ibaccess.i386
   ibaccess.kof
   ibaccess.sh
   ibaccess.todo
   ibacconst.pas
   ibacutils.pas
   ibacutils.xfm
   ibexecsql.pas
   ibexecsql.xfm
   ibidxnew.pas
   ibidxnew.xfm
   ibidxstat.pas
   ibidxstat.xfm
   ibnewconstraint.pas
   ibnewconstraint.xfm
   ibnewdom.pas
   ibnewdom.xfm
   ibnewus.pas
   ibnewus.xfm
   ibproces.pas
   ibproces.xfm
   ibprojects.bpg
   ibresto.pas
   ibresto.xfm
   ibscripter.pas
   ibscripter.xfm
   ibtraceflags.pas
   ibtraceflags.xfm
   ibtranop.pas
   ibtranop.xfm
   ibutil2.pas
   ibutil2.xfm
   mainform.pas
   mainform.xfm
   metaextract.pas
   metaextract.xfm
   modibase.pas
   modibase.xfm
   newblobfilter.pas
   newblobfilter.xfm
   newdatabase.pas
   newdatabase.xfm
   newdbfile.pas
   newdbfile.xfm
   newexception.pas
   newexception.xfm
   newfunction.pas
   newfunction.xfm
   newgrant.pas
   newgrant.xfm
   newshadow.pas
   newshadow.xfm
   newstored.pas
   newstored.xfm
   newtrigger.pas
   newtrigger.xfm
   newview.pas
   newview.xfm
   opendatabase.pas
   opendatabase.xfm
   repairdatabase.pas
   repairdatabase.xfm
   roleaccess.pas
   roleaccess.xfm
   serverprops.pas
   serverprops.xfm
   tabledepen.pas
   tabledepen.xfm
   tablenew.pas
   tablenew.xfm
   userman.pas
   userman.xfm
   usernameform.pas
   usernameform.xfm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
{*******************************************************}
{                                                       }
{       IBAccess                                        }
{       User manager dialog                             }
{                                                       }
{       Author:                                         }
{       Toni Martir                                     }
{       http://www.ibaccess.org                         }
{       e-mail: toni@pala.com                           }
{                                                       }
{       OpenSource license (MPL)                        }
{                                                       }
{*******************************************************}

unit userman;

interface

uses
  SysUtils, Classes, QForms,
  diaser, Db, IBDatabase, IBServices, ibmanclx,
  rpibdb,ibacutils,variants,
{$IFDEF MSWINDOWS}
  registry,windows,
{$ENDIF}
  IBSQL,ibacconst,dbclient, QControls, QGrids, QDBGrids, QStdCtrls,
  QDialogs, QButtons;

type
  TFUserman = class(TFService)
    GType: TGroupBox;
    RadioService: TRadioButton;
    RadioCommandline: TRadioButton;
    IbMan1: TIbManagerCLX;
    IBSec: TIBSecurityService;
    Label5: TLabel;
    Erole: TEdit;
    DBase: TIBDatabase;
    Tran1: TIBTransaction;
    IBSQL1: TIBSQL;
    DMemtable: TClientdataset;
    DataSource1: TDataSource;
    GUsers: TGroupBox;
    DBGrid1: TDBGrid;
    BModi: TBitBtn;
    BDelete: TBitBtn;
    Bnew: TBitBtn;
    DMemtableUSER_NAME: TStringField;
    DMemtableFIRST_NAME: TStringField;
    DMemtableMIDDLE_NAME: TStringField;
    DMemtableLAST_NAME: TStringField;
    DMemtableUID: TIntegerField;
    DMemtableGID: TIntegerField;
    procedure RadioCommandlineClick(Sender: TObject);
    procedure BOKClick(Sender: TObject);
    procedure BnewClick(Sender: TObject);
    procedure BDeleteClick(Sender: TObject);
  private
    { Private declarations }
    procedure FillIBSecparams;
  protected
   procedure OnConChange(Sender:TObject);override;
  public
    { Public declarations }
    role:string;
  end;

var
  FUserman: TFUserman;

procedure ManageIBUsers(var username,password,role,server:string;var protocol:TRpIBXProtocol;dbconf:TRpDBIBconf);

implementation

uses ibnewus;

{$R *.xfm}

procedure ManageIBUsers(var username,password,role,server:string;var protocol:TRpIBXProtocol;dbconf:TRpDBIBconf);
var
 dia:TFUserman;
begin
 dia:=TFUserman.create(Application);
 try
  dia.Eusername.text:=username;
  dia.EPassword.text:=password;
  dia.Erole.text:=role;
  dia.EServer.text:=server;
  dia.dbconf:=dbconf;
  dia.EServerChange(dia);
  dia.comboprotocol.itemindex:=integer(protocol);
  dia.Radiocommandline.checked:=ibmanclx.globalusecommandline;
  dia.showmodal;
  if dia.executed then
  begin
   username:=dia.USername;
   password:=dia.Password;
   role:=dia.role;
   server:=dia.Server;
   protocol:=dia.protocol;
  end;
 finally
  dia.free;
 end;
end;

procedure TFUserman.RadioCommandlineClick(Sender: TObject);
var
{$IFDEF MSWINDOWS}
 reg:TRegistry;
{$ENDIF}
 epath:string;
begin
 inherited;
 epath:='';
 // try to find the user database
 Label1.Visible:=RadioCommandline.checked;
 EBase.Visible:=RadioCommandline.checked;
 if Radiocommandline.checked then
 begin
{$IFDEF MSWINDOWS}
  reg:=TRegistry.create;
  try
   Reg.Access:=KEY_READ;
   Reg.RootKey:=HKEY_LOCAL_MACHINE;
   if Length(Trim(EServer.text))>0 then
    if Not reg.RegistryConnect('\\'+EServer.text) then
     exit;
   if Not reg.OpenKey('Software\InterBase Corp\InterBase\CurrentVersion',false) then
    if Not reg.OpenKey('Software\Borland\InterBase\CurrentVersion',false) then
      exit;
   epath:=reg.ReadString('RootDirectory');
   if Length(epath)<=0 then
    exit;
   if epath[length(epath)]='\' then
    epath:=Copy(epath,1,Length(epath)-1);
   epath:=epath+'\isc4.gdb';
   EBase.text:=epath;
  finally
   reg.free;
  end;
{$ENDIF}
{$IFDEF LINUX}
  epath:='';
  if Length(ibman1.servername)>3 then
  begin
   epath:=Copy(ibman1.servername,1,Length(ibman1.servername)-3);
   epath:=epath+'isc4.gdb';
  end;
  EBase.text:=epath;
{$ENDIF}
 end;
end;

procedure TFUserman.FillIBSecparams;
begin
  IBSec.Params.clear;
  IBSec.params.add('user_name='+EUsername.text);
  IBSec.params.add('password='+EPassword.text);
  if length(Trim(ERole.text))>0 then
   IBSec.params.add('sql_role_name='+ERole.text);
  IBSec.ServerName:=Trim(EServer.Text);
  if Length(IBSec.ServerName)=0 then
  begin
   IBSec.protocol:=Local;
  end
  else
  begin
   IBSec.protocol:=TProtocol(ComboProtocol.itemindex);
  end;
end;

procedure TFUserman.BOKClick(Sender: TObject);
var
 sql:string;
 i:integer;
begin
  inherited;
 role:=ERole.text;
 if Radiocommandline.checked then
 begin
  dbase.connected:=False;
  dbase.Params.clear;
  dbase.sqldialect:=3;
  dbase.databasename:=BuildIBDatabaseName((Length(Trim(EServer.text))>0),TRpIBXProtocol(ComboProtocol.ItemIndex),EServer.Text,EBase.text);
  dbase.params.add('user_name='+EUsername.text);
  dbase.params.add('password='+EPassword.text);
  if Length(Trim(Erole.text))>0 then
   dbase.params.add('sql_role_name='+ERole.text);
  dbase.connected:=true;
  try
   DMemTable.Active:=False;
   DMemTable.Createdataset;
   DMemTable.disablecontrols;
   try
    sql:='SELECT USER_NAME,FIRST_NAME,'+
     'MIDDLE_NAME,LAST_NAME,UID,GID '+
     'FROM USERS '+
     ' ORDER BY USER_NAME';
    FillDataset(IBSQL1,Tran1,sql,DMemtable,nil);
    DMemTable.first;
   finally
    DMemTable.enablecontrols;
   end;
  finally
   dbase.connected:=false;
  end;
  GUsers.Visible:=True;
 end
 else
 begin
  FillIBSecParams;
  IBSec.Attach;
  try
   IBSec.DisplayUsers;
  finally
   try
    IBSec.Detach;
   except
   end;
  end;
  DMemtable.close;
  DMemtable.Createdataset;
  DMemtable.disablecontrols;
  try
   for i:=0 to IBSec.UserInfoCount-1 do
   begin
    DMemTable.Append;
    try
     DMemTableUSER_NAME.Value:=IBSec.UserInfo[i].UserName;
     DMemTableFIRST_NAME.Value:=IBSec.UserInfo[i].FirstName;
     DMemTableMIDDLE_NAME.Value:=IBSec.UserInfo[i].mIDDLEName;
     DMemTableLAST_NAME.Value:=IBSec.UserInfo[i].lASTnAME;
     DMemTableUID.Value:=IBSec.UserInfo[i].UserID;
     DMemTableGID.Value:=IBSec.UserInfo[i].groupid;
     DMemtable.post;
    except
     DMemTable.cancel;
     raise;
    end;
   end;
   DMemTable.first;
  finally
   DMemTable.enablecontrols;
  end;
  GUsers.visible:=true;
 end;
end;

procedure TFUserman.OnConChange(Sender:TObject);
begin
 inherited;
 Gusers.visible:=false;
end;


procedure TFUserman.BnewClick(Sender: TObject);
var
 dia:TFIBNewUser;
 uid,gid:variant;
begin
 if sender=BMODI then
  if DMemtable.eof and dmemtable.bof then
   exit;
 dia:=TFIBNewUser.create(Application);
 try
  if Sender=BModi then
  begin
   dia.EUsername.text:=DmemTableUSER_NAME.asstring;
   dia.EFirstname.text:=DmemTableFIRST_NAME.asstring;
   dia.EMiddlename.text:=DmemTableMIDDLE_NAME.asstring;
   dia.ELastname.text:=DmemTableLAST_NAME.asstring;
   if DMemTableUID.Isnull then
    dia.EUserID.text:=''
   else
    Dia.EUserID.Text:=DMemTableUId.AsString;
   if DMemTableGID.Isnull then
    dia.EGroupID.text:=''
   else
    Dia.EGroupID.Text:=DMemTableGId.AsString;
  end
  else
   dia.EUsername.text:='ANewUser';
  dia.caption:=SRpNewuser;
  if Sender=BModi then
  begin
   dia.ActiveControl:=dia.EPassword;
   dia.EUsername.readonly:=true;
   dia.caption:=SRpModifyuser;
  end;
  dia.showmodal;
  if dia.docreate then
  begin
   if RadioCOmmandline.checked then
   begin
    ibman1.serverpath:=ibmanclx.globalserverpath;
    ibman1.filename:=BuildIBDatabaseName((Length(Trim(EServer.text))>0),TRpIBXProtocol(ComboProtocol.ItemIndex),EServer.Text,EBase.text);
    ibman1.username:=EUsername.text;
    ibman1.password:=EPassword.text;
    uid:=null;
    gid:=null;
    if Length(Dia.EUserId.Text)>0 then
     uid:=StrToInt(dia.EUserId.text);
    if Length(Dia.EGroupId.Text)>0 then
     gid:=StrToInt(dia.EGroupId.text);
    if Sender=BModi then
     ibman1.ModifyUser(dia.EUsername.text,dia.epassword.text,
     dia.efirstname.text,dia.emiddlename.text,dia.elastname.text,uid,gid)
    else
     ibman1.AddUser(dia.EUsername.text,dia.epassword.text,
     dia.efirstname.text,dia.emiddlename.text,dia.elastname.text,uid,gid);
   end
   else
   begin
    FillIBSecparams;
    IBSec.Username:=dia.EUsername.Text;
    IBSec.Password:=dia.EPassword.text;
    IBSec.FirstName:=dia.EFirstname.text;
    IBSec.MiddleName:=dia.EMiddlename.text;
    IBSec.LastName:=dia.ELastname.text;
    if Length(dia.EUserID.text)>0 then
     IBSec.UserID:=StrToInt(dia.EUserID.text)
    else
     IBSec.UserID:=0;
    if Length(dia.EGroupID.text)>0 then
     IBSec.GroupID:=StrToInt(dia.EGroupID.text)
    else
     IBSec.UserID:=0;
    IBSec.Attach;
    try
     if sender=BModi then
      IBSec.Modifyuser
     else
      IBSec.Adduser;
    finally
     try
      IBSec.Detach;
     except
     end;
    end;
   end;
   BOKClick(Self);
  end
 finally
  dia.free;
 end;
end;

procedure TFUserman.BDeleteClick(Sender: TObject);
begin
 if DMemtable.eof and dmemtable.bof then
  exit;
 if RadioCOmmandline.checked then
 begin
  ibman1.serverpath:=ibmanclx.globalserverpath;
  ibman1.filename:=BuildIBDatabaseName((Length(Trim(EServer.text))>0),TRpIBXProtocol(ComboProtocol.ItemIndex),EServer.Text,EBase.text);
  ibman1.username:=EUsername.text;
  ibman1.password:=EPassword.text;
  ibman1.DeleteUser(DMemtableUSER_NAME.AsString);
 end
 else
 begin
  FillIBSecparams;
  IBSec.Username:=DMemtableUSER_NAME.AsString;
  IBSec.Attach;
  try
   IBSec.DeleteUser
  finally
   try
    IBSec.Detach;
   except
   end;
  end;
 end;
 BOKClick(Self);
end;

end.

About Koders | Resources | Downloads | Support | Black Duck | Submit Project | Terms of Service | DMCA | Privacy Policy | Site Map| Contact Us