ผู้เขียน หัวข้อ: ขอคำแนะนำในการเข้าสิทธิ์แต่ละเมนูหน่อย  (อ่าน 3799 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ thecoy

  • Hero Member
  • *****
  • กระทู้: 1,159
  • นักวิชาการคอมพิวเตอร์
  • Respect: 0
    • ดูรายละเอียด
กำลังพัฒนาระบบด้วย delphi ครับ  การกำหนดสิทธิ์ให้ผู้ใช้งานเข้าใช้แต่ละงานแต่ละเมนู ขอคำแนะนำหน่อยครับ
หรือมีตัวอย่างก็ดีครับ ;D
hosxp เก็บในตาราง opduser  filed  accessright   แล้วเรียกผ่าน function canaccess
« แก้ไขครั้งสุดท้าย: กันยายน 19, 2011, 15:29:39 PM โดย thecoy »
โรงพยาบาลรัษฎา  ตรัง
CentOS 5.5  Ram  4  GB
HOSxP V.3.54.11.2 MySQL 5.1.30

ออฟไลน์ armds

  • Hero Member
  • *****
  • กระทู้: 1,084
  • armds
  • Respect: +10
    • ดูรายละเอียด
Re: ขอคำแนะนำในการเข้าสิทธิ์แต่ละเมนูหน่อย
« ตอบกลับ #1 เมื่อ: กันยายน 19, 2011, 15:30:34 PM »
0
ที่ผมเคยใช้ก็ใช้ ฟังชัน ของ อ.mn  อะครับ
กำหนด  ชื่อ  OPD_CUSTOM_SEARCH จากตาราง  accessoperation  อ้างอิงในระบบสิทธิการใช้งานของ HOSxP ครับลองดูนะครับ  หรือรอคำอธิบายจาก อ.ท่านอื่นๆ ผมประสบการณ์ยังน้อยครับ

if (not canaccess('OPD_CUSTOM_SEARCH')) then
  begin
    showaccessdenied;
    exit;
  end;
// แล้วค่อยเปิดฟอร์มที่ต้องการ   
ClinicForm := TClinicForm.Create(application);
ClinicForm.Show;

โรงพยาบาลสมเด็จพระยุพราชด่านซ้าย จ.เลย
ขนาด 60 เตียง นวก. คอมพิวเตอร์ ขึ้นระบบ ปี 2548
ขอบคุณ อ.ชัยพร อ.สุชัย อ.เดชา อ.doreamon อ.naj อ.ขวด และอ.ในเว็บ hosxp.net ทุกท่าน

ออฟไลน์ thecoy

  • Hero Member
  • *****
  • กระทู้: 1,159
  • นักวิชาการคอมพิวเตอร์
  • Respect: 0
    • ดูรายละเอียด
Re: ขอคำแนะนำในการเข้าสิทธิ์แต่ละเมนูหน่อย
« ตอบกลับ #2 เมื่อ: กันยายน 19, 2011, 15:46:02 PM »
0
function CanAccess(AccessName: string): boolean;
var
  tc: tclientdataset;
begin
  flast_access_name := accessname;
  result := false;

  if getsqldata('select count(rightname) as cc from accessoperation ' +
    ' where rightname="' + accessname + '" ') = 0 then
  begin
    with kskdm.bcds1 do
    begin
      close;

      data := HOSxP_GetDataset('select * from accessoperation limit 0');

      append;
      fieldbyname('rightname').asstring := accessname;
      fieldbyname('accessname').asstring := 'Access_' + accessname;
      post;
      if changecount > 0 then
        HOSxP_UpdateDelta(delta, 'select * from accessoperation limit 0');

      close;
    end;

  end;

  kskdm.fcds.close;

  if getsqldata('select count(loginname) as cc from opduser') <= 0 then
  begin
    //kskdm.fcds.close;
    result := true;
    exit;
  end;
  kskdm.fcds.close;

  if not FUseExProvider then
  begin
    if sys_db = 'MySQL' then
      kskdm.fcds.data :=
        hosxp_getdataset('select accessright from opduser where loginname="'
        +
        flgn + '"')
    else
      kskdm.fcds.data :=
        hosxp_getdataset('select accessright from opduser where upper(loginname)="'
        +
        uppercase(flgn) + '"');
    kskdm.fcds.open;

    result := (pos(uppercase(string(accessname)),
      uppercase(kskdm.fcds.fieldbyname('accessright').asstring)) > 0) or
      (pos('[ADMIN]', uppercase(kskdm.fcds.fieldbyname('accessright').asstring))
      >
      0);

  end
  else
  begin
    tc := tclientdataset.create(nil);
    tc.data :=
      HOSxP_GetDataSet('select accessright from opduser where loginname=''' +
      flgn + '''');
    result := (pos(uppercase(string(accessname)),
      uppercase(tc.fieldbyname('accessright').asstring)) > 0) or
      (pos('[ADMIN]', uppercase(tc.fieldbyname('accessright').asstring)) >
      0);
    tc.free;

  end;

  //showmessage('Request -> '+AccessName+#13+
  //'Compare -> '+kskdm.fcds.fieldbyname('accessright').asstring);
  kskdm.fcds.close;

end;
โรงพยาบาลรัษฎา  ตรัง
CentOS 5.5  Ram  4  GB
HOSxP V.3.54.11.2 MySQL 5.1.30