الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

شرح نظام الصلاحيات وانشاء شاشة الدخول بالتفصيل...

Featured Replies

بتاريخ:

بسم الله الرحمن الرحيم



السلام عليكم ورحمة الله وبركاته,,,
اخواني الاعزاء في هذا المنتدى الرائع والمتميز دائما بطرح المواضيع والمشاركات المهمة جدا لكل مبرمج اوراكل...وأشكر الله على المحبة بين جميع الاخوه....وأسأل الله التوفيق للجميع...
موضوعنا اليوم مهم جدا لكل برنامج يجب برمجته على أي لغة برمجة... ألا وهو شاشة الدخول والمستخدمين ونظام الصلاحيات على الفورم:

بسم الله نبدأ:

أولاً يجب إنشاء جدول خاص بالمستخدمين:

CREATE TABLE  "USER_PRV"
  (	"USR_ID"				VARCHAR2(100),
"USR_ANAME"	  VARCHAR2(100),
"USR_ENAME"	   VARCHAR2(100),
"USR_PASSWORD" VARCHAR2(50),
"USR_TYPE"			 NUMBER,
"USR_STATUS"		NUMBER,   
 CONSTRAINT "USER_PRV_PK" PRIMARY KEY ("USR_ID") ENABLE
  )
/



حيث:
USR_ID : (User name) هو اسم المتسخدم
USR_ANAME: اسم المستخدم باللغة العربية
USR_ENAME: اسم المستخدم لاللغة الانجليزية
USR_PASSWORD: الرقم السري
USR_TYPE: نوع المستخدم
USR_STATUS: حالة المستخدم
وسنتطرق لاحقا ما الهدف من استخدام نوع المستخدم و حالة المستخدم ان شاءالله.


ثانياً: سنقوم بإنشاء فورم خاص بالجدول السابق لادخال مستخدمين على هذا الجدول...وليكن من نوع TABULAR.
ملاحظة:

User_Type
ضع هذا الحقل من نوع LIST ITEM وقم بادخال انواع المستخدمين مثلا ( مستخدم، مدير، مدير قاعدة
بيانات...الخ )

USR_STATUS
ضع هذا الحقل مثلا من نوع CHECK BOX.

عند عمل الفورم سيظهر لنا كما بالصورة التالية:

http://img441.images...28/39498679.gif

بعد ذلك اعمل RUN للفورم وقم بإدخال عدد من المستخدمين على الجدول... وسيكون كما بالصورة:

http://img103.images...42/22010510.gif

ثالثاً:
سنقوم الآن بعمل شاشة الدخول وهي كالآتي:
اولا نقوم بإنشاء فورم عليه حقلين من نوع TEST ITEM ومن خصائص هذين الحقلين نضعهما
DATA BASE = NO

كما هو مبين في الصورة:

http://img189.images...32/92018006.gif

وبعد ذلك نذهب إلى الــ PROGRAM UNITS كما في الصورة:

http://img43.imagesh...13/60775976.gif

ونقوم بإنشاء PROCEDURE وليكن إسمه USERS_ACC ونكتب بداخله هذا الكود:

PROCEDURE USERS_ACC IS
VN_COUNT   NUMBER(10) := 0;
VV_USRSTS  NUMBER(1)  := '';
VV_USRTYPE NUMBER(1)  := '';
VV_TYPE	NUMBER;
 
BEGIN

BEGIN
SELECT COUNT(1)
INTO   VN_COUNT
FROM   USER_PRV
WHERE  UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);
EXCEPTION WHEN NO_DATA_FOUND THEN
VN_COUNT := 0;
END;

IF VN_COUNT = 0 THEN
:PARAMETER.P_TRIALS := NVL(:PARAMETER.P_TRIALS,0) + 1;
IF :PARAMETER.P_TRIALS = 3 THEN
EXIT_FORM(NO_COMMIT,NO_VALIDATE);
ELSE
MESSAGE('PLEASE ENTER USER NAME OT PASSWORD');
  MESSAGE('PLEASE ENTER USER NAME OT PASSWORD');
GO_BLOCK('USER_PRV');
CLEAR_BLOCK(NO_COMMIT);
GO_BLOCK('USER_PRV');
END IF;
ELSE

BEGIN

SELECT USR_STATUS , USR_TYPE
INTO   VV_USRSTS , VV_USRTYPE
FROM   USER_PRV
WHERE  UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);
EXCEPTION WHEN NO_DATA_FOUND THEN
NULL;
END;

-- CHECKING USER SETING
IF VV_USRSTS <> '0' THEN
MESSAGE('USER ACCOUNT IS LOCKED');
EXIT_FORM(NO_COMMIT,NO_VALIDATE);
END IF;
----------------------------------------------------------------------------------------------------------
:GLOBAL.P_USER_TYPE:=VV_USRTYPE;	
:GLOBAL.P_USER_ID:=:USER_PRV.USR_ID;
NEW_form('C:\GBT_SYS\FRM\MAIN_PAGE.fmx');
CLEAR_BLOCK(NO_COMMIT);
END IF;
END;



وسنبدأ الآن بشرح الكود بالتفصيل:

* يستخدم هذا الكود للتأكد من وجود USER NAME و PASSWORD مثل اليوزر والباس اللي رح تدخلهم على الفورم بشاشة الدخول.

BEGIN
SELECT COUNT(1)
INTO   VN_COUNT
FROM   USER_PRV
WHERE  UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);
EXCEPTION WHEN NO_DATA_FOUND THEN
VN_COUNT := 0;
END;



* يستخدم هذا الكود عشان يعمل CHECK ... إذا المستخدم قام بإدخال اليوزر او الباس غلط 3 مرات يطلع من البرنامج ... طبعا بالمرة الاولى والثانية رح يعطيه ERROR MESSAGE.
بالاضافة انه يجب عمل PARAMETER على الفورم وليكن اسمه P_TRIALS كما هو موضح بالصورة التالية:

http://img39.imagesh...44/73939583.gif

IF VN_COUNT = 0 THEN
:PARAMETER.P_TRIALS := NVL(:PARAMETER.P_TRIALS,0) + 1;
IF :PARAMETER.P_TRIALS = 3 THEN
EXIT_FORM(NO_COMMIT,NO_VALIDATE);
ELSE
MESSAGE('PLEASE ENTER USER NAME OT PASSWORD');
  MESSAGE('PLEASE ENTER USER NAME OT PASSWORD');
GO_BLOCK('USER_PRV');
CLEAR_BLOCK(NO_COMMIT);
GO_BLOCK('USER_PRV');
END IF;



* الكود التالي يستخدم لجلب الـــ USER_TYPE و الــ USER_STATUS لليوزر الذي دخل على النظام.

SELECT USR_STATUS , USR_TYPE
INTO   VV_USRSTS , VV_USRTYPE
FROM   USER_PRV
WHERE  UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);
EXCEPTION WHEN NO_DATA_FOUND THEN
NULL;
END;



* الكود التالي يستخدم في حالة كانت قيمة الـــ USER_STATUS لا تساوي صفر ... سيعطي البرنامج ان حساب هذا المستخدم مغلق ... حيث أن الــ CHECK BOX بفورم المستخدمين سيكون كالتالي: اذهب الى خصائص هذا الـــ CHECK BOX وضع:
WHEN VALUE CHECKED = 1
WHEN VALUE UNCHECKED = 0

IF VV_USRSTS <> '0' THEN
MESSAGE('USER ACCOUNT IS LOCKED');
EXIT_FORM(NO_COMMIT,NO_VALIDATE);
END IF;



* يستخدم هذا الكود لوضع الــ USER_ID و USER_TYPE داخل GLOBAL VARIABLES التي ستساعدك على عمل صلاحيات على جميع الفورم ... بالاضافة إلى الانتقال الى الفورم الرئيسية ( MAIN_PAGE )
التي يكون مربوط عليها الـــ MENU

:GLOBAL.P_USER_TYPE:=VV_USRTYPE;	
:GLOBAL.P_USER_ID:=:USER_PRV.USR_ID;
NEW_form('C:\GBT_SYS\FRM\MAIN_PAGE.fmx');
CLEAR_BLOCK(NO_COMMIT);
END IF;
END;




بعد النهاية من كتابة الكود السابق والتأكد من عدم وجود ERRORS نقوم بإضافة زر على الفورم ونستدعي إسم البروسيجر داخل هذا الزر.
بمعنى اخر ضع زر على الفورم واختر ترجر WHEN-BUTTON-PRESSED واكتب بداخله :

USERS_ACC;



رابعاً :
قم بعمل RUN لفورم الدخول وقم بكتابة يوزر نيم وباسوورد صحيحين كما ادخلتهم بفورم المستخدمين وعند الضغط على الزر يجب أن ينقلك إلى الشاشة الرئيسية الموجود عليها المنيو.

خامساً:
إذا اردت إظهار اسم المستخدم الذي دخل على النظام على شاشة معينه فقم بالتالي:
1- ضع DISPLAY ITEM على الفورم.
2- من خصائص هذا الــ DISPLAY اذهب الى خاصية الــ INITAIL VALUE واكتب بداخلها الكود التالي:

:GLOBAL.P_USER_ID


حيث اننا وضعنا اسم المستخدم داخل GLOBAL VARIABLE في البروسيجر السابق.

سادساً:
إذا اردت منع مستخدم معين من فتح شاشة معينه ... فاذهب الى المنيو التي تريد المستخدم منعه من فتحها واكتب بداخلها الكود التالي:

IF :GLOBAL.P_USER_TYPE=1 THEN
SET_MENU_ITEM_PROPERTY('ACC_MNU.MENU1.MAIN',VISIBLE,PROPERTY_FALSE);
ELSE
CALL_form('C:\GBT_SYS\FRM\COURSES.fmx');
END IF;



حيث أننا منعنا المستخدم الذي نوعه = 1 من فتح هذه الشاشة.

بينما إذا أردت ان تسمح للمستخدم أن يفتح هذا الفورم ولكن تريد ان تمنعه من عمل خصائص أخرى ... ستستخدم كود معين وساطرح عليكم بعض الاكواد:

IF  :GLOBAL.P_USER_TYPE =1 THEN
SET_ITEM_PROPERTY('GBT_LOGIN.USR_TYPE',UR_PROPERTY,PROPERTY_FALSE);
END IF;



حيث الخصائص ممكن ان تكون كالتالي:
INSERT_ALLOWED
DELETE_ALLOWED
UPDATE_ALLOWED
ENABLED
VISIBLE
.
.
.
.
.
الخ.


واخيرا وليس آخراً...أتمنى ان اكون قد وفقت في طرح الموضوع بطريقة سلسة ومفيدة.
ولا تنسونا من صالح دعائكم.
وتحياتي للجميع...وانتظروا المزيد باذن الله.
ملاحظة: جميع الصور الموجودة بالموضوع داخل المرفقات.
أخوكم في الله: أحمد

pixz.rar

تم تعديل بواسطة Ahmad.Hasan

  • الردود 156
  • المشاهدات 67.1k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

Most Popular Posts

  • أشــــرف
    أشــــرف

    اخي العزيز مشكور على الكود لكن عن كتابة البروسيجر يظهر ايرور bind variable حاولت الغي bind مما يسبب exception ياريت تساعدني ومشكور مقدما

  • السلام عليكم فورم المستخدمين وفورم الدخول بالمرفقات... بالتوفيق sys_login.rar

  • الأخ بالي الحبيب العزيز مشكور على موضاعتك القيمة والممتازة ولي رآى في هذا الموضوع (موضوع الصلاحيات ) ماذا لو افترضنا ان لدينا نظام كبير لشركة كبرى ويوجد فيها العديد من الأنظمة انني اقترح ان تبد

الصور المنشورة

بتاريخ:

اخي العزيز مشكور على الكود لكن عن كتابة البروسيجر يظهر ايرور

bind variable

حاولت الغي bind

مما يسبب exception

ياريت تساعدني ومشكور مقدما

بتاريخ:
  • كاتب الموضوع

السلام عليكم
أخي اشرف..
قم بعمل اسم البلوك كمان هو موضح بالكود..
وان امكن كتابة اين الخطأ بالتحديد ؟؟؟
وهل قمت بإنشاء parameter ؟؟

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);
في هذه الجملة
bad bind varible 'user_prv.usrid'

بالاضافة لما اضيف :GLOBAL.P_USER_ID:=:USER_PRV.USR_ID;
بيعطي ايرور انه مابنفع استخدم جدول هنا

واسم البلوك

USER_PRV

بتاريخ:

انشات باراميتر من نوع نمبر علشان يعد 3 مرات لليوزر

مع العلم اني استخدم اوراكل 10 g

تم تعديل بواسطة أشــــرف

بتاريخ:
  • كاتب الموضوع

السلام عليكم

bad bind varible 'user_prv.usrid'

بهذه الجملة لاحظ انك كاتب usrid والعمود بالجدول usr_id ....
تاكد من هذه النقطة.

ولاحظ ان هذه الجملة الصحيحة..

WHERE  UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);



وليست هذه:

UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

تاكدت والله يااخي كانت خطا في كتابة الرد لاني ناسخ الكود ولاصقه

الفورم مرفق وشكرا لسرعه الرد

logon.rar

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:
  • كاتب الموضوع

السلام عليكم
فورم المستخدمين وفورم الدخول بالمرفقات...
بالتوفيق

sys_login.rar

بتاريخ:

مشكور ياخي وبارك الله فيك شغال تمام

بتاريخ:
  • كاتب الموضوع

بسم الله الرحمن الرحيم



إخواني الاعزاء...دعونا نكمل هذا الموضوع حتى النهاية ان شاءالله...

الموضوع كالتالي:

كيفية منع المستخدم من الدخول إلى النظام مرتين في نفس الوقت ؟؟؟

الجدول موجود والفورم موجود ... ونريد تطبيق عملي على الفورم .... ونريد افكاركم...

أتمنى الاستفادة للجميع...

بالتوفيق

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU.STAFF_DETAILS',ENABLED,PROPERTY_FALSE);


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

بتاريخ:

المشكلة انه لا يعمل disabled للقائمة

بتاريخ:
  • كاتب الموضوع

السلام عليكم
تاكد من من المنيو وكتابة الــ SUB MENU بشكل صحيح...
وجرب استخدام VISIBLE
بالاضافه اخي ماهر لما تعمل COMILATION للمنيو اغلق الفورمز...

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

السلام عليكم

Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU.STAFF_DETAILS',ENABLED,PROPERTY_FALSE);


أخي ماهر لاحظ انك كاتب اسم المنيو وبعد كده اسم المنيو الفرعي اه الاي مكتوب بعد كده
يعني خليها كده او اضبطها زي ماعندك يعني الاسم الرئيس ثم الفرعي

Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU',ENABLED,PROPERTY_FALSE);

بتاريخ:
السلام عليكم
Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU.STAFF_DETAILS',ENABLED,PROPERTY_FALSE);


أخي ماهر لاحظ انك كاتب اسم المنيو وبعد كده اسم المنيو الفرعي اه الاي مكتوب بعد كده
يعني خليها كده او اضبطها زي ماعندك يعني الاسم الرئيس ثم الفرعي

Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU',ENABLED,PROPERTY_FALSE);


lمشكور اخي مصطفى اشتغلت تمام
بتاريخ:

السلام عليكم

الله يعطيك العافية ياستاذ احمد وربنا مايحرمنا منك ابدا ابد. المعذرة انا حاولت في نظام الصلاحيات ولكن مانفع معي الصراحة.
ممكن ياخي تشوف الفورمز اللي انا عملتها مع اني نزلت الفورمز تبعك اللي في هذا الموضوع ولكن ماضبطت معي. على كل حال انا منزل هنا الفورمز تبعي وياريت تعطيني رايك يالغالي.


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

بالنسبة لاظهار رقم المستخدم انه مايظهر اول ماشغل النافذة لابد ان اعمل اكسكيوت كويري ومن ثم يظهر رقم المستخدم.


ممكن تشرح لي هذا السطر
SET_MENU_ITEM_PROPERTY

('ACC_MNU.MENU1.MAIN',VISIBLE,PROPERTY_FALSE);

طبعا انا اريد الذي بين الاقواس يعني اين اضع اسم البلوك وماذا تقصد بالمنيو



شكرا لك ياخي العزيز واسال الله التوفيق لك.

new.zip

تم تعديل بواسطة Only-Oracle

بتاريخ:
  • كاتب الموضوع

السلام عليكم
اخي العزيز...
تم التعديل على الفورم فقط قم بالدخول على الكود الموجود بصفحة اللوجن واكتب المسار الصحيح الذي لديك...
واذا اشتغل معاك تمام ؟؟ نبدأ بالخطوة التالية !!!

ولكن لتكون على علم:

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

لوقف زر معين عن العمل استخدم :

SET_BLOCK_PROPERTY('BLK.BUTTON_NAME',ENABLED,PROPERTY_FALSE);



بالنسبه انك بدك تعمل 2 USER اضف على الجدول الــ USR_TYPE كما ذكرت سابقا وراجع الصورة...

SET_MENU_ITEM_PROPERTY

('ACC_MNU.MENU1.MAIN',VISIBLE,PROPERTY_FALSE);



هذا الكود يستخدم لوقف عمل منيو معينه .. فقط يستخدم في حال استخدامك للمنيو ....

بالنسبة لاظهار رقم المستخدم انه مايظهر اول ماشغل النافذة لابد ان اعمل اكسكيوت كويري ومن ثم يظهر رقم المستخدم.

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

بالتوفيق

new.rar

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

هلا فيك ياخي

لم يشتغل الكود الذي وضعته اتوقع انك ربط بالفورمة اللي اعطيتك اياها بالاول. وايضا اجد انه بعض الحقول لم يتناسب مع الفورمة الاولى وهو يوسر لوجن والفورمة الثانية يسور برف.

ياريت اذا امكن تعديل الفورم وياريت اذا ممكن تضع لي الكود تبع منع المتسخدم العادي من المسح والتعديل يعني فقط يعمل دسبلاي للمعلومات.

بتاريخ:
  • كاتب الموضوع

السلام عليكم
اخي قم بكتابة الجدول الخاص بك وساقوم بالتعديل عليه حسب جدولك...
بالتوفيق

بتاريخ:

وعليكم السلام والرحمة

انا احتمال الغي الفورمة الاولى اللي انت عارفها واضع نفس شكل الفورمة تبعك لانه تحتوي على حقول كثيرة فانت ممكن تكمل معايا على نفس اللي انا وضعته هنا.


على كل حال انا الجدول تبعي هو كالاتي

create table user_login(
USR VARCHAR2(30) PRIMARY KEY,
PASS VARCHAR2(30));


شكرا لك وربنا يجزيك كل خير

بتاريخ:
  • كاتب الموضوع

السلام عليكم
افضل اضافة عمود جديد وهو الــ USER_TYPE ...
 

create table user_login(
USR VARCHAR2(30) PRIMARY KEY,
PASS VARCHAR2(30),
USR_TYPE NUMBER(2));

ان اعتمدت هذا الجدول خبرني...!!
بالتوفيق

تم تعديل بواسطة Ahmad.Hasan

بتاريخ:

مابعرف بخصوص شاشة الدخول الرئيسية ولكن في شاشة البيرفلج احتاج ايضا الى USR_STATUS حتى استطيع ان اقفل على بعض اليسر. بعدم الدخول بالمرة على النظام فتظهر لهم رسالة تفيد بانه الاكونت تبعهم مقفل.

على كل حال انت شوف الشي المفيد.

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.