delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف اعمل برنامج multi-user 'صلاحيات المستخدمين' بواسطة قاعدة بيانات؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله تعالى و بركاته

كيف اعمل برنامج multi-user 'اي صلاحيات المستخدمين ' بواسطة قاعدة بيانات MS Access

و شكرا مقدما Big Grin
ﻻيمكن عمل عدة مستخدمين للاكسس يمكنك عمل مشاركة فقط ويمكنك الرجوع لموقع مايكروسوفت

لمعرفة طرق المشاركة لقاعدة بيانات الاكسس

اما افضل واسهل قاعدة بيانات لعمل عدة مستخدمين فهي ابسليوت داتا بيس
السلام عليكم

يمكن عمل برنامج متعدد المستخدمين للاكسس بطريقتين
الأولى التي ذكرها الأخ cleversa ( لا ينصح بها عند كثرة المستخدمين بل عدد المستخدين محدود بـ10 على ما أظن)
الثانية صعبة بعض الشيئ برنامج متعدد الطبقات (طبقة البيانات - طبقة العمليات 'المنطق'-طبقة العرض'برنامج العميل')

اما افضل واسهل قاعدة بيانات لعمل عدة مستخدمين فهي ابسليوت داتا بيس
أسهل ربما ، أفضل من كل المحركات الموجودة لا أعتقد ( أفضل من أي جانب ؟ )
شكرا لك اخي cleversa انا اصبحت استخدم ابسليوت داتا بيس لكن كيف اعطاء صلاحيات مثل : مدير . مستخدم 1.. مستخدم2... تعدد المستخدمين فيها على حسب ما اطلعت و فهمت هو تعدد المستخدمين للبرنامج في نفس الوقت على العموم شكرا لك

شكرا لك اخي Lam.Abdeldjalil ....حاليا استعمل ابسليوت داتا بيس لكن قصدت تعدد المستخدمين من حيث الصلاحيات كما ذكرت سابقا ... لاني في صدد عمل برنامج يستخدمه الكثير من الاشخاص على نفس الجهاز و لذلك ستتفاوت صلاحياتهم في الدخول له . لقد اطلعت على الامثلة المرفقة مع القاعدة لكن لم اجد ضالتي بعد ... و شكرا مسبقا Big Grin
ibrahimkira كتب :. لقد اطلعت على الامثلة المرفقة مع القاعدة لكن لم اجد ضالتي بعد ... و شكرا مسبقا :d

السلام عليكم
لما لا تعمل هذا برمجيا حيث تدرج قائمة المستخدمين في جدول و عند كل ولوج تتحقق من المستخدم برمجيا وتمنحه صلاحيات التي تودها أو تقسم مستخديك إلى مجموعات و تمنح المجموعة الصلاحيات برمجيا ....
السلام عليكم...

أعتقد أن أفضل طريقة هي استعمال حقل للصلاحيات (في جدول المستخدمين) و يكون نوع الحقل مفكرة أو مذكرة (Memo). ثم استعمال الدوال التالية لمعالجة الصلاحيات. بهذه الطريقة لن تكون مقيداً بعدد محدود من الصلاحيات، و يمكنك أن تزيد بعد ذلك في الصلاحيات دون الحاجة إلى تعديل الجدول في قاعدة البيانات.

أ. نفرض أن جول المستخدمين اسمه Users و يتكون من الحقول التالية:

1. UserID
2. UserName
3. Password
4. Authorities الصلاحيات

ب. في القسم interface لكود النافذة الرئيسية أو unit عامة قم بتعريف الصلاحيات كثوابت مع إعطائها قيماً متسلسلة ابتداءً من الواحد. مثلاً:

كود :
const AUTH_ADD_NEW = 1; // إضافة بيانات AUTH_MODIFY = 2; // تعديل بيانات AUTH_DELETE = 3; // حذف بيانات AUTH_PRINT_INVOICE = 4; // طباعة فاتورة AUTH_PRINT_SALES_REPORT = 5; // طباعة تقرير المبيعات AUTH_BACKUP = 6; // نسخ احتياطي AUTH_RESTORE = 7; // استعادة بيانات // إلخ

ج. قم بتعريف متغير يمثل صلاحيات المستخدم الذي قام بتسجيل الدخول، مثلاً:

كود :
var UserAuths: string;

*** و طبعاً ستضبط قيمة هذا المتغير عند تسجيل الدخول حسب ما هو محفوظ في سجل المستخدم في قاعدة البيانات.

د. ضع التصريحات التالية في القسم interface:

كود :
procedure GiveAuthority(var Authorities: string; Index: Integer); procedure DeleteAuthority(var Authorities: string; AuthCount, Index: Integer); procedure GiveAllAuthorities(var Authorities: string); procedure DeleteAllAuthorities(var Authorities: string); function UserHasAuthority(Authorities: string; Index: Integer): Boolean;

هـ. في القسم implementation ضع تعريفات الإجراءات و الدوال السابقة:

كود :
procedure GiveAuthority(var Authorities: string; Index: Integer); var Auths: string; AuthLen: Integer; begin if Index < 1 then Exit; Auths := UpperCase(Trim(Authorities)); if Auths = 'A' then Exit else if Auths = 'N' then Auths := ''; AuthLen := Length(Auths); if Index <= AuthLen then Auths := StuffString(Auths, Index, 1, 'T') else Auths := Auths + StringOfChar('F', Index - AuthLen - 1) + 'T'; if Pos('F', Auths) = 0 then Authorities := 'A' else Authorities := Auths; end; procedure DeleteAuthority(var Authorities: string; AuthCount, Index: Integer); var Auths: string; AuthLen: Integer; begin if Index < 1 then Exit; Auths := UpperCase(Trim(Authorities)); if Auths = 'N' then Exit else if Auths = 'A' then Auths := StringOfChar('T', AuthCount); AuthLen := Length(Auths); if Index <= AuthLen Then Auths := StuffString(Auths, Index, 1, 'F') else Auths := Auths + StringOfChar('F', Index - AuthLen - 1) + 'F'; if Pos('T', Auths) = 0 then Authorities := 'N' else Authorities := Auths; end; procedure GiveAllAuthorities(var Authorities: string); begin Authorities := 'A'; end; procedure DeleteAllAuthorities(var Authorities: string); begin Authorities := 'N'; end; function UserHasAuthority(Authorities: string; Index: Integer): Boolean; var Auths: string; AuthLen: Integer; begin if Index < 1 then Result := False else begin Auths := UpperCase(Trim(Authorities)); AuthLen := Length(Auths); if Auths = '' then Result := False else if Auths = 'N' then Result := False else if Auths = 'A' then Result := True else if Index > AuthLen then Result := False else if Copy(Auths, Index, 1) = 'T' then Result := True else Result := False; end; end;

*** في الأكواد السابقة: الصلاحيات يمكن أن تكون:
- A تشير إلى All أي لديه كل الصلاحيات.
- N تشير إلى None أي ليس لديه أية صلاحيات.
- سلسلة من حروف T و F حيث مث الـ T و جود الصلاحية، و تمثل الـ F عدم وجود الصلاحية.

*** و الدوال تعمل كالتالي:

* الإجراء GiveAuthority لمنح المستخدم إحدى الصلاحيات:

كود :
GiveAuthority(UserAuths, AUTH_PRINT_SALES_REPORT);

* الإجراء DeleteAuthority لسحب إحدى الصلاحيات:

كود :
DeleteAuthority(UserAuths, 20, AUTH_PRINT_SALES_REPORT); // حيث 20 - مثلاً - عدد الصلاحيات في برنامجك

* الإجراء GiveAllAuthorities: لمنح المستخدم كافة الصلاحيات:

كود :
GiveAllAuthorities(UserAuths)

* الإجراء DeleteAllAuthorities: لإزالة كافة الصلاحيات:

كود :
DeleteAllAuthorities(UserAuths)

* الدالة UserHasAuthority لمعرفة ما إذا كان المستخدم يملك إحدى الصلاحيات أم لا. هذه الدالة تعيد True أو False:

كود :
if UserHasAuthority(UserAuths, AUTH_BACKUP) then begin // ... // إجراءات النسخ الاحتياطي // ... end else ShowMessage('ليس من صلاحياتك إجراء النسخ الاحتياطي');


نرجو الاستفادة و السلام.