الانتقال إلى المحتوى

سؤال بكيفية التحكم بالمستخدمين


Ismael

Recommended Posts

السلام عليكم

لدي مشروع تقريباً انتهيت منه، لكن واجهتني مشكلة في الشاشة الأولى ألا وهي شاشة الدخول LOGON

بدايتاً سوف أحاول أن أقوم بتقريب الفكرة وبعدها سوف أطرح السؤال..

أولاً قمت بإنشاء جدول بإسم Users وبها ثلاثة أعمدة وهي:

  • No (رقم الموظف)
    Name (اسم الموظف)
    Password (كلمة السر)

ثم قمت بإنشاء شاشة يدوية غير مرتبطة بقاعدة البيانات Control Block وليست Basic
وفيها أضفت Text Item وذلك لكي أقوم بوضع رقم الموظف فيها، وأضفت تريجر إذا كان الرقم موجود يقوم بعرض الإسم حقه في حقل Display Item وينتقل المؤشر على حقل آخر Text Item وفيها أقوم بوضع كلمة السر، أيضاً بها تريجر إذا تساوت مع البيانات في الجدول يقوم بالدخول على شاشة أخرى وهكذا

السؤال:
الآن في الجدول Users يوجد Tow User فقط، وأريد أن أجعل الأول به كل الصلاحيات من حيث الإدخال والتعديل والحذف، أما الآخر فأريده أن يستعلم فقط.

أرجوا أن تكون الفكرة وصلت..
ملاحظة: بالنسبة للشاشة الأولى Logon متصلة بقاعدة بيانات للمستخدم Scott، وأنا أريده بعد أن ينتقل إلى الشاشة التالية أن يقطع الإتصال ويدخل بإسمه، فهل من طريقة لفعل ذلك...

رابط هذا التعليق
شارك

اولا Ismael
للدخول الى الداتا بيز باى Username and password
هذا هو الكود

LOGON('Username','password@host name');

ثانيا السؤال المرتبط بالصلاحيات

لو انت ماعندكش غير اثنين مستخدمين
هاتعمل If statment فى التريجر When new form instance

declare
intNo number(1);
begin select No
into intNo from users ;
-- تحدد المستخمين
if intno = 1 then
-- هنا منطقة الصلاحيات
-- يعنى ممكن تجعل الازرر الخاصة بالاضافة و التعديل Visible = false او Enabeld = false
else
-- للمستخدم الاخر اى صلاحيات اخرى
end if ;
end;


لو فية اى استفسار اخر احنا موجودين :rolleyes:
شكراً

تم تعديل بواسطة John
رابط هذا التعليق
شارك

تعليق واستفسار

اقول اولا واخيراً لكي تتصل بسرفر أوراكل ثم الداتابيز نفسها لابد من
username/password
ويكون له صلاحيات معينه
فلو انا صنعت طريقه للدخول علي الفورم واكرر الدخول علي الفورم فقط وليس التغير في المستخدم الاساسي المتصل بالسرفر فيظل الصلاحيات هي هي

فكيف تعطي صلاحيات لمستخدم داخل به علي الفورمه وهو ليس معرف لدي السرفر
نرجوا التوضيح بكود منفذ

رابط هذا التعليق
شارك

وعليكم السلام
بالنسبة للتحكم في الصلاحيات على مستوى الفورم , تحتاج الى الجداول التالية

جدول المستخدمين

user_no 
user_name
user_pass



جدول النماذج

module_no
module_name



جدول ربط المستخدمين مع الشاشات (جدول الصلاحيات)

user_no
module_no
is_view
is_insert
is_delete
is_update


الجدول الاخير هو الجدول المهم والذي يتم فيه تحديد صلاحيات كل مستخدم مع شاشة معينه (هل لدية صلاحية للعرض او الحذف او للتعديل او للادخال)
القيم التي سوف تكون في حقول تحديد الصلاحية هي قيم رقمية (0 او 1)

ملاحظة:
هذه الطريقة سوف تمكننا من وضع صلاحية للمستخدم على مستوى الفورم ككل ,
في بعض الاحيان تحتاج الى ان تكون الصلاحية على مستوى الblock او ال item (اي ان يكون المستخدم الفلاني لدية صلاحية للتعديل في كل الـblocks الموجوده في شاشة معينه ما عدا block معين )
وبالمثل يمكن ان توضع الصلاحية على مستوى الitem (اي ان يكون المستخدم لدية الصلاحية للتعديل او الاضافة في كل الitems ما عدى item معين)
لعمل هذ نحتاج الى اضافة جدولين اخرين
الاول جدول للـblocks ويكون details لجدول الmoduels
والثاني جدول للـitems ويكون details لجدول الـblocks
والان يعدل جدول الصلاحيات بحث يتم اضافة حقلين جديدن هما
block_no
item_no
وبذلك نستطيع ان نحدد صلاحيات بصورة ادق

رابط هذا التعليق
شارك

شـــــــــــــــــــكـــــــــــــــــــــــــ :D ــــرااااااااااااااااا جــــــــــــــــــــــــــــــــــــــــ :) ــــــــــــــــــون
عـــلـــــى الـــــكــــود :D

رابط هذا التعليق
شارك

السلام عليكم

من خلال ما ذكر سابقا هناك اتجاه للاعتماد علي جداول تحتوي علي بيانات للتحكم في دخول الي الفورم وفي التعامل معها ايضا
أولاً :اقول وما المانع ان اعتمد علي هذه الجداول للدخول علي الفورمه نفسها فقط
واتحكم انا في المنطق البرمجي الذي تحتويه الفورمه بمعني
هذه الفورمه لاتحتوي علي اي عبارة لإجراء حذف وبالتالي لايمكن الحذف باستخدام هذه الفورمه
وهكذا بالنسبة للتعديل والإضافة والاختيار
مع العلم بان المستخدم لهذه الفورمه لايستطيع الدخول علي اي فورمه اخري
لان دخوله علي هذه الفورمه مبني في الاساس علي منطق البرمجة في هذه الفورمه فقط فقط

وعند العمل بالمنطق هذا انا في غني عن جداول للصلاحيات

شكراً

رابط هذا التعليق
شارك

اهلا بكم وبكل اقتراحاتكم
بالنسبة لاقتراح الاخ amr20
ممكن ان يكون كذلك اذا كانت الصلاحيات للمستخدمين هو الدخول للفورم او عدم الدخول فقط , ولكن في بعض الاحيان تحتاج الى ان تعمل صلاحيات لمستخدم معين بحيث يكون لديه صلاحية للدخول في الفورم واستعراض البيانات ولكن لا توجد لديه صلاحية للتعديل , وكذلك وبنفس المنطق تريد هذا المستخدم ان تكون لديه صلاحية التعديل والحذف والعرض بالنسبة لفورم اخر , او ان تكون لديه صلاحية للدخول في فورم معين بحيث يستطيع ان يستعرض البيانات وايضاً يستطيع ان يضيف ولكن ليس لديه صلاحية التعديل .... وهكذا . فلذلك تحتاج ان تعمل الجداول وان تحدد بها صلاحيات المستخدمين مع الشاشات .ضف الى ذلك انه في بعض الاحيان تحتاج الى ان تحدد صلاحيات على مستوى الـblock اي ان يكون المستخدم الفلاني لديه صلاحية في الشاشة الفلانية ولكن ليس كل الـblocks الموجوده في الشاشه اي ان يكون لديه صلاحية التعديل والحذف في الـblock المعين دوه الاخر , وهنا نحتاج الى جداول اضافية كما هو موضح في الكلام السابق .

اما بالنسبة لاقتراح الاخ شبيــــه الريح
كلامك صحيح مئة بالمئة لان عمل السكيرتي على الداتابيس هو اضمن وافضل , ولكن اتوقع ان عمل الصلاحيات من قاعدة البيانات لك مستخدم معين سوف يكون فيه نوع من الصعوبه , وخاصة عندما يكون لديك عدد كبير من المستخدمين , ولكن لا يمنع ان تحدد بعض صلاحيات الجداول المهمة كالجداول المالية وغيرها , وكذلك تعمل الصلاحية الاخرى من الفورم لانه سوف يكون اسهل ,
ضف الى ذلك انك عندما تعمل عدد من المستخدمين في الداتابيس وتعمل عدد من الـobjects في كل مستخدم سوف تواجه مشاكل كثيره في عملية الـexport والـimport , فانك حين تعمل export وimport مره ثانية سوف تجد ان معضم الـviews والـpackages تحتاج الى re-compile مره ثانية وخاصة الـobject الموجوده في مستخدم معين وهي تعتمد على مستخدم آخر .

رابط هذا التعليق
شارك

السلام عليكم
شكرا ياشباب على هذا الموضوع الرائع وصراحة انا مع كلام الأستاذ خالد من ناحية عمل نظام الأمن بالإعتماد على نطام مستقل غيرالموجود في قاعدة البيانات خصوصا إذا كان هناك عدد كبير من الصلاحيات وهناك إختلاف كبير في الصلاحيات التي تعطى لكل مستخدم أي تعدد صلاحيات مستخدمين النظام ،أيضا هناك موضوع التراخيص والذي قد يكلف الشركة او المنشأة الكثير عند وجود عدد كبير من المستخدمين :) !! ارجوا من الجميع المشاركة في هذا الموضوع لكي نصل إلى خلاصة أيهما أفضل لإعتماد على نظام الأمن الموجود في قاعدة البيانات أو بناء نظام مستقل عنها؟؟
وتحياتي للجميع

رابط هذا التعليق
شارك

هلا والله اخوي خالد

كلامك صحيح ولكن يوجد شي يسمى ROLE

وهي مجموعه من الصلاحيات موضوعه في ROLE وهذى يسهل عمل الادمن كثير

فيقوم بأنشاء عدد من ROLE مثل واحده للأستعلام وواحده للتعديل وواحده للحذف وهكذا

وبالطريقه هذى تصبح اسهل من عمل الجداول

هذى من رائي

وارجو ان نناقش هذى الموضوع لكي نصل إلى اقتناح احد الطرفين برائي الطرف الاخر

مع خالص تحياتي

شبيــــــــــه الريح

رابط هذا التعليق
شارك

انا مع راي عمل جداول للمستخدمين والصلاحيات
والتحكم في الصلاحيات من خلال الفورم
خصوصا في البرامج التي لا تحتاج الى مستوى امن عالي

اضافة الى الصعوبات التي قد ذكرها الاخوة
فان اضافة المستخدمين واعطاء الصلاحيات عن طريق الفورم قد تكون اسهل بالنسبة للمستخدم العادي

رابط هذا التعليق
شارك

هلا والله اخوي developer

جميل جدا ان نقوم بمناقشه هذى الامر الهام جدا جدا

ومن كلامك انه السبب الوحيد الذي جعلك تستخدم عملية انشاء جداول للمستخدمين هي صعوبة التحكم في اليوزر والصلاحيات الممنوحه عن طريق الفورم


وانا اقول لك هذى غير صحيح وهي من اسهل الامور

وانا الان اقوم بتجهيز شرح شامل لطريقه التحكم بالمستخدمين من انشاء وحذف ومنح صلاحيات وغيرها من الامور الهامه

وبأذن الله سوف يتغير رائيك ورائي باقي الاخوه

تحياتي لك

شبيــــــــــه الريح

رابط هذا التعليق
شارك

السلام عليكم

سأقوم بشرح مختصر وبسيط لعمل ذلك.
1. يجب أن يحوي البرنامج على واجهة لادخال اسماء المستخدمين وتعريف صلاحيات دخولهم، ويجب أن يكون الدخول إليها وفق صلاحيات، أما الدخول للمرة الأولى فلا يحتاج لأي صلاحية دخول
ويمكن ذلك بعمل

select count(*) into v_users  from users;

2. التأكد من ان اسم المستخدم موجود في الجدول بنفس الطريقة، وفي حال تطابق كلمة السر المدخلة مع كلمة السر المخزنة فيسمح له بالدخول للواجهة الرئيسية للبرنامج.

3. التحكم بدخول المستخدم إلى واجهات البرنامج ويتم ذلك بتعريف صلاجيات دخوله، ويفضل تعريف رقمين للدخول لكل واجهة
فمثلا من أجل الواجهة x يتم تعريف الرقمين 15 و 16 على سبيل المثال
ومن أجل الواجهة Y يتم تعريف الرقمين 17 و 18 ----- سأبين لماذا رقمين لاحقا.

4. عند ضغط المستخدم على menu البرنامج يقوم البرنامج بفحص التالي:
هل للمستخدم الموجود حالياً صلاحية دخول إلى الواجهة x والتي رقمها 15 في حال نعم السماح له بالدخول وبالوصول الكامل من حذف وتعديل واضافة + عرض query
أما في حال ان المستخدم ليس له صلاحية دخول إلى الواجهة x والتي رقمها 15 فهل له صلاحية دخول بالصلاحية رقم 16 وفي حال نعم يدخل المستخدم بوضع استعلام فقط

وبفرض ان جدول تعريف الصلاحيات موجود بالاسم mod_priv وتعرف فيه كل واجهة بما يقابلها من أرقام صلاحيات الخاصة بها
وبفرض أيضا ان جدول الصلاحيات الممنوحة هو privs ويحوي على الاعمدة التالي:
user_no اسم المستخدم
prive_no الصلاحية الممنوحة له

فإنه يمكننا التأكد من صلاحية دخول مستخدم إلى واجهة ما بما يلي:

declare
v_mod_x number;
begin
select count(*) 
into v_mod_x
from privs
where user_no = global.user_no
and prive_no = 15;
if v_mod_x > 0 then 
 call_form(x);
else
select count(*) 
into v_mod_x
from privs
where user_no = global.user_no
and prive_no = 16;
if v_mod_x > 0 then 
 call_query(x);
else
  message('you do not have privilege to enter this form');
end if;
end;




وذلك باعتبار ان global.user_no هو رقم المستخدم الذي دخل إلى البرنامج منذ البداية

أرجو ان أكون قد افدتكم
والسلام.

رابط هذا التعليق
شارك

شكر اخي شبيه الريح على ردك الجميل

صعوبة التحكم بالمستخدمين من قبل المستخدم العادي ليس السبب الوحيد لدي ولكن اضافة الى الاسباب التي ذكرها الاخوة
مثل زيادة عدد المستخدمين في الداتابيس وهذا يزيد من تكاليف الترخيص الذي يعتمد على عدد اليوزرس

ومنتظرين شرحك لكي تعم الفائدة وبارك الله فيك


شكر اخي sam_t على هذا الشرح المفيد

رابط هذا التعليق
شارك

  • بعد 8 سنة...

ياجماعة الخير حد ممكن يعملنا فديو يشرح الكلام الجميل ده علشان نستفاد صح ونستطيع عمل اشياء جديدة ليست منقولة عنكم فانكم بارعون فى هذا وجذاكم الله خيرا

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية