kullanıcı yetkisine göre form bileşeni gösterme ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen sarp_halit »

Merhaba arkadaşlar.

Kullanıcı bazlı bir proje geliştirmek istiyorum. projemde formlar ve üzerindeki bileşenler kullanıcının yetkisine göre gösterilecek. kullanıcı yetkilerini veritabanından seçecek.

yetkilendirmeyi de şu şekilde düşünüyorum:

veritabanında modul bilgilerini tutan bir tablo olacak. modülid, modül açıklama ve bileşen ismi.

bir de kullanıcı yetki tablosu olacak tabi. onda da kullanıcı id modulid alanları mevcut.

kullanıcnın yetkisi dahilinde modüller tablosunda adı geçen bileşeni göstermek ya da saklamak için ne yapabilirim. bileşen handle diye bir şey ama nasıl yapılacağını bilmiyorum.

bu konu ile ilgili olarak önerebileceğiniz başka bir yöntem var mı ya da bu bahsettiğim şeyi nasıl yapabilirim?

teşekkür ederim.
Fethiye den herkese sevgiler ...
X))@:>
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen ikra »

Kod: Tümünü seç

edit1.visible := query_yetki.asinteger = 1;
eger yetki 1 ise edit nesnesi görünür, degil ise edit nesnesi görünmez.
kıdemsiz üye
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen CiTiZEN »

geliştirdiğim bir programda zaman kısıtlı olduğu için şu şekilde birşey yapmıştım, kullanıcı adı, bir ayraç, şifresi ve yetkisi: kullanıcı adı $ şifresi @ yetkisi 18 li bir yetki sistemi olması gerekiyordu olasılıkları hesaplayacak vaktim olmadığı için 18 adet 1 ve 0 ı string bir array a yüklüyordum.Sonra atıyorum 1. formu açmak için s[1]=1 koşulu, 2. formu açmak için s[2]=1 koşulu vs. gibi kontrol ediyordum

Kolay Gelsin.
UWESIS CORPORATION
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen sarp_halit »

Ben daha farklı bir yöntem düşündüm ama nasıl yapacağımı bilemedim. ilk kez deneyeceğim bir şey olduğundan dolayı biraz takıldım.

bir dll üzerinden form bileşenlerini kontrol etmeyi düşünüyorum hoş bunu ayrı bir unit içerisinde fonksiyon olarak da tanımlayabilirdim de ama ne bileyim dll konusunda da bilgi sahibi olmak gerek :)

Yapmak istediğim şey:

Projede yer alan bütün formlar ve bileşenler veri tabanında kayıtlı. dll içerisinde geçerli form ve kullanıcı isimlerini parametre alan bir prosedür var. bir adet query oluşturup bu parametrelerle geçerli olan form ve kullanıcıya göre bileşenlerin göstereceğim ya da gizleyeceğim.

ancak dllde prosedürü tanımladım ama nasıl kullanacağımı bilemedim.

bu konuda örnek referans alabileceğim ya da bilgi edinebileceğim bir kaynak var mı? ya da başka bir yöntem önerebilir misiniz?

Teşekkür ederim.

Hayırlı akşamlar.
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen conari »

viewtopic.php?t=4692

http://delphi.programcilari.com/?p=82


---DLL-------------

Kod: Tümünü seç

library DNDLL;
uses
Dialogs,
Windows;

procedure Mesajim;
begin
MessageDlg('DNDLL UYGULAMASI ',mtConfirmation,[mbok],0);
end;
exports
Mesajim;
begin
end.
//KULLANIM

Kod: Tümünü seç

unit UFormDLL;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
public
end;
procedure Mesajim; external 'DNDLL.dll';
var
Form1: TForm1;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Mesajim;
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen sarp_halit »

dll olayını çözdük. şimdi benim asıl yapmak istediğim şey:

FORMNAME------BILESEN-----USER_ID-----YETKI
frmMainform frmMainform Halit 1
frmMainform btnYeni Halit 1
frmMainform btnGuncelle Halit 1

Yetki tablosu bu şekilde. Projede yer alan bütün formlar ve formlarda yer alan bütün bileşenler ( isimleri) tabloda tutuluyor. dll dosyasından da aşağıdaki gibi bir prosedür var.

Kod: Tümünü seç

procedure FormBileseniYukle(form, Kullanici:String); export;
  var sorgu:TAdoQuery;
  gecerliBaglanti:String;
  vtbaglantisi:TIniFile;
  kayitsayisi:integer;
begin
  sorgu:=TAdoQuery.Create(nil);
  vtbaglantisi:=TIniFile.Create(ExtractFilePath( Application.ExeName )+'veritabanlari.ini');
  with sorgu do
  begin
    ConnectionString:=frmMainform.gecerlibaglantiver;
    Close;
    SQL.Clear;
    SQL.Add('Select * FROM webKULLANICIYETKILER WHERE (FORMNAME=:form) AND (Kullanici=:KUL)');
    Parameters.ParamByName('form').Value:=form;
    Parameters.ParamByName('KUL').Value:=Kullanici;
    if not Active Then Active:=True;
    Open;
    while not eof do
    begin
      for kayitsayisi:=0 to recordcount do
      begin
          ????????????????????????????????????????????? 
      end;
    end;
  end;
end;
amacım her bileşen için tek tek kontrol sağlamak yerine bir döngü kurup form üzerinde yetkisi 1 olan bileşenlerin visible özelliklerini true yapmak.

Böyle bir şeyi yapmak mümkün mü acaba?

şimdi for döngüsünün içerisine şu kodu yazarsam isim string türünde bir değişken olacağından doğal olarak hata verecek.

Kod: Tümünü seç

if fieldbyname('YETKI').AsInteger = 1 Then fieldbyname('BILESEN').AsString:=True Else fieldbyname('BILESEN').AsString:= False;
tablodan gelen ismi bileşen adına göre bileşeni nasıl visible yapabilirim?

Teşekkür ederim.
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen conari »

while not eof do
içerisinde

form1.+querybilesenALAN.value+.visible:=true;
next
end;

gibi bir şey denenebilir belki.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: kullanıcı yetkisine göre form bileşeni gösterme ?

Mesaj gönderen sarp_halit »

merhaba arkadaşlar.

iş yoğunluğundan dolayı anca yanıt verebildim. kusura bakmayın.
elimde iki adet tablo var. birinci tabloda form üzerinde bulunan bütün bileşen isimlerinin bulunduğu bir tablo.

Kod: Tümünü seç

/****** Object:  Table [dbo].[webRFORMLARI]    Script Date: 02/04/2011 16:18:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[webRFORMLARI](
	[FORMADI] [varchar](50) COLLATE Turkish_CI_AS NOT NULL,
	[FORMACIKLAMA] [varchar](50) COLLATE Turkish_CI_AS NOT NULL,
	[BILESENADI] [varchar](50) COLLATE Turkish_CI_AS NOT NULL,
	[BILESENTIPI] [varchar](20) COLLATE Turkish_CI_AS NOT NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
Bir de kullanıcı yetkilerinin olduğu bir tablo. kullanıcı yetkilerinin olduğu tabloda bu bilgilerin aynısı var ( kullanıcı eklendiğinde bileşenleri görüp görememesine ilişkin bileşen bilgilerini almak için böyle bir yöntem yaptım.)
onun yapısı da şu şekilde:

Kod: Tümünü seç

/****** Object:  Table [dbo].[webKULLANICIYETKILERI]    Script Date: 02/04/2011 16:21:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[webKULLANICIYETKILERI](
	[FORMADI] [varchar](50) COLLATE Turkish_CI_AS NOT NULL,
	[BILESENADI] [varchar](50) COLLATE Turkish_CI_AS NOT NULL,
	[BILESENTIPI] [varchar](20) COLLATE Turkish_CI_AS NOT NULL,
	[KULLANICI] [nvarchar](100) COLLATE Turkish_CI_AS NOT NULL,
	[YETKI] [smallint] NOT NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
dll dosyasında kullandığım prosedür ise şu şekilde. bunu dll yapmak istememdeki amaç sadece dll dosyaları ile çalışmak ve nasıl işlediğini öğrenmek.

Kod: Tümünü seç

library kullaniciYetkileri;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  inifiles,
  db,
  adodb,
  forms,
  Variants,
  ComCtrls,
  Controls,
  StdCtrls,
  Classes;

{$R *.res}

procedure formbileseniyukle(formadi, kullanici:String; sorgu:TADOQuery); export;
var kullanicivar, bilesenvar:boolean;
i:integer;
bilesen:TComponent;
begin
  try
    //ilk olarak kullanıcı yetki tablosunda var mı kontrol et?
    with sorgu do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT KULLANICI FROM webKULLANICIYETKILERI WHERE (KULLANICI=:KULLANICI)');
      Parameters.ParamByName('KULLANICI').Value:=kullanici;
      if not Active then  active:=True;
      Open;
      if Eof Then kullanicivar:=False else kullanicivar:=True;
      if kullanicivar Then
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM webKULLANICIYETKILERI WHERE (KULLANICI=:KULLANICI) AND (FORMADI=:AKTIFFORM)');
        Parameters.ParamByName('KULLANICI').Value:=kullanici;
        Parameters.ParamByName('AKTIFFORM').Value:=formadi;
        if not Active Then Active:=True;
        Open;
        While not eof do
        begin
          for i:=0 to ComponentCount-1 do
          begin
            if Components[i].Name=VarToStr(FieldValues['BILESENADI']) Then
            begin
              //??? burada ne yapacağımı bilmiyorum ????
            end;
          end;
        next;
        end;
      end else
      begin
        Application.MessageBox(Pchar(kullanici+' kullanıcısı için yetkilendirme yapılmadığından dolayı sisteme giriş yapamazınız.'+#13+'Lütfen bilgi işlemden yetki alınız.'),'Randevu');
        Halt;
      end;
    end;
  finally

  end;
end;

exports formbileseniyukle;

begin
end.
bu arada dll dosyasının projeye eklenemesinde ve çalıştırılmasında herhangi bir problem yok.

emeği geçen bütün arkadaşlara çok teşekkür ederim.

iyi çalışmalar.
Fethiye den herkese sevgiler ...
X))@:>
Cevapla