الانتقال إلى المحتوى
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

بتاريخ:

السلام على من اتبع الهدى


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

النظام باختصار يعطى الصلاحيات على مستوى application مش الداتا بيز يعنى كل المستخدمين داخلين على اسكيما او يوز واحد .
النظام مكون مجموعه من الفورم
اولا بناء الجدوال

CREATE USER mo
IDENTIFIED BY mo;
**********************
GRANT dba 
TO mo 
**********************
CREATE TABLE v_user(
emp_id NUMBER(6) ,
gro NUMBER(6) ,
velad VARCHAR2(25),
nick VARCHAR2(25),
pass VARCHAR2(25),
v_user VARCHAR2(25),
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (emp_id)
);
***********************************************
CREATE TABLE v_group(
gro NUMBER(6) ,
gro_name VARCHAR2(25),
CONSTRAINT gro_id_pk
PRIMARY KEY (gro )
);
**********************************************
ALTER TABLE v_user 
ADD CONSTRAINT gro_fk
FOREIGN KEY(gro) REFERENCES v_group(gro) ;
************************************
CREATE TABLE v_from(
gro NUMBER(6) not null,
from_name VARCHAR2(25)not null,
v_upd VARCHAR2(25)not null,
v_int VARCHAR2(25)not null,
v_del VARCHAR2(25)not null,
velad number(25)not null,

PRIMARY KEY (gro,from_name )
);
*********************************************
ALTER TABLE v_from 
ADD CONSTRAINT v_form_gro_fk
FOREIGN KEY(gro) REFERENCES v_group(gro) ;


نبداء بجدول v_user هو جدوال المستخدمين نظام

emp_id رقم الموظف هو طبعا ممكن يتربط بجدوال الموظفين hr
gro مفروض انهو الجروب التابع الىى الموظف و طبعا ممكن يتربط بجدوال الاقسام
velad هو عباره عن صلاحيه المستخدم صالح او لا 1 و صفر متلا
nick اسم الشهره او اسم الموظف الحقيقى
v_user اسم المستخدم الخاص بدخول
pass كلمه المرور
**********
جدوال v_group الجروب هو طبعا لو نظام هيستخدم فى اى برنماج كبير يبقى هنستغى عن الجدول ده بجدوال الاقسام
gro رقم الجروب هو مرتبط بجدوال v_user
gro_name اسم الجروب او القسم
**********************
v_from جدوال الفورم اللى موجد فى النظام و صلاحيا كل جروب او قسم عليها وهنا نكتفى 3 او 4 شاشات بس لتجربه
gro رقم القسم او الجروب زطبعا مرتبط بجدوال الجروب
from_name اسم الفورمه
velad هل القسم مسموح لها بفتح الفورمه دى ولا v صالح n مش صالح متلا
v_upd وv_int وv_del هل الجروب مسموح له باجراء الانسيرت و الايبدات و الديلت ولا لا v صالح و n يصلح متلا
نبتدى بقى اولا نعمل كام جمله انسيرت على اساس فهمنا للنظام زاى ماشرحت
بعد كدها نبتدى فى اول فورمه و نسميها LONG
ونعمل بلوك هنسميهاPASS مش داتا بيز بلوك
ونعمل 2 تيكست ايتم بردك مش داتبيز ايتم V_USER و V_PASS و ديزبلى ايتم اسمه weel
و اتنين بوش بوتن و احد لدخول و واحد تانى لتعديل البيانات الدخول
ناجى على ايتم الى اسمه V_USER وعلى تريجر WHEN-VALIDATE-ITEM نكتب الكود ده

DECLARE
	CURSOR V_US IS select EMP_ID , 
GRO,	PASS, NICK,V_USER
FROM V_USER WHERE 
UPPER (V_USER) = UPPER (:PASS.V_USER);-1
V_VELAD VARCHAR2(20); 
BEGIN
IF :PASS.V_USER IS NULL THEN -- 2 
MESSAGE('ادخل اسم المستخدم');
MESSAGE('ادخل اسم المستخدم
RAISE Form_Trigger_Failure;
ELSE
SELECT VELAD INTO V_VELAD FROM V_USER WHERE 
UPPER (V_USER) = UPPER (:PASS.V_USER);--3 
IF UPPER(V_VELAD )<>'V' THEN
	MESSAGE('هذا المستخدم موقف');
	MESSAGE('هذا المستخدم موقف');
RAISE Form_Trigger_Failure;
	END IF ;
OPEN V_US ;-- 4 
FETCH V_US INTO 
:GLOBAL.V_EMP_ID,
:GLOBAL.V_GRO,
:GLOBAL.V_PASS,
:GLOBAL.V_NICK,
:GLOBAL.V_USER; ÇáÏÎæá
CLOSE V_US ;
END IF ;
SET_ITEM_PROPERTY('PASS.WELL',VISIBLE ,PROPERTY_TRUE);--5
:PASS.WELL:='مرحبا بك '||:GLOBAL.V_NICK;
EXCEPTION
WHEN NO_DATA_FOUND THEN 
MESSAGE('تاكد ان المستدم موجد '); 
MESSAGE('هذا المستخدم موقف');
RAISE Form_Trigger_Failure; -- 6
END;


مش عارف اشغل نظام الاكود بس يارب احد المشرفين ينسق الموضع لان فى مشكله عندى
شرح الكود كل نقطه كاتب جنبه رقم هشرحه
1- كريسون هيجاب بيانات المستخدم من الجروب وكلمه المرور و هكذاا
2-طبعا مش مسموح ان يخرج با الكريسون وهو سايب الفيلد فاضى
3- هنا طبعا بنتاكد من نقطين مهمين اوى هما ان اسم الدخول موجد ولا لا لو مش موجد هينزل تحت على الاكسبيشن لو موجد هنتاكد ان كان صالح ولا لا
4-لو اليازور موجد وصالح هبتدى احمل بيانتو من القسم او الجروب وكلمه المرور و هكذا
5-هنا نعرض رساله ترحيب باسم اليوزر
6 طبعا الجزاء هيتنفذ لو مفيش اسمرور بنفس الاسم
هناجى بقى فى الايتم V_PASS و تريجر بردك WHEN-VALIDATE-ITEM ونكتب الكود ده

DECLARE

P NUMBER(20);
X NUMBER(20):=0;
BEGIN
IF :PASS.V_PASS <>:GLOBAL.V_PASS THEN -- هنا بتاكد من صحه كلمه المرور 
MESSAGE('تلكد من رمز المرور لو تكرر هذا الخطاء 3 مرات سيتم غلق المستخدك ');
MESSAGE(' تلكد من رمز المرور لو تكرر هذا الخطاء 3 مرات سيتم غلق المستخدك ');
CONT.X:=CONT.X+1;-- هنا بزود واحد عشان لورقم و صل الى 3 اليوزر هيتوقف
IF CONT.X = 3 THEN
:SYSTEM.MESSAGE_LEVEL := '5'; 
UPDATE V_USER SET VELAD='N' 
WHERE EMP_ID = :GLOBAL.V_EMP_ID;
---------------- هنا ماينفعش اقف االفورمه ولا اعمل كومنن 
CONT.X := 100; --- خليت اليرقم ده 100 عشان هقفل الفورمه بس من حته تانيه 
END IF ;
IF not CONT.X = 100 THEN
	RAISE Form_Trigger_Failure;
	end if ; -- هنا بقالو لو رقم مش 100 يعنى لسه موصلش الى 3 محولات اوقف الكريسون و خلى يجرب تانى
END IF ;
END;
END;


*************************************8
و هنا فى البوش بوتن بتاع التعديل فى البيانات على تريجر WHEN-BUTTON-PRESSED

IF :PASS.V_USER IS NULL OR :PASS.V_PASS IS NULL THEN
MESSAGE('ادخل بيانات الدخول ');
MESSAGE('ادخل بيانات الدخول ');
ELSE 

CALL_FORM('PRDATE');

END IF ;

-- هنا بتاكد انو دخل البيانات و اكيد صح لانى لو مش صح مش هيدوس اساسا على البوتن تغير البيانات

فى البوتن بتاع الدخل هنعمل على مستوى WHEN-NEW-ITEM-INSTANCE

if CONT.X =100 then 
:SYSTEM.MESSAGE_LEVEL := '5';
commit ;
MESSAGE('تمك غلق المستخدم اتصل بى مدير قاعده البيانات');
exit_form ;
ELSE
GO_ITEM('PASS.V_PASS');
end if;



-- هنا بتاكد من رقم اللى عمله لو 100 يعنى حاول يدخل كلمه المرور اكتر من 3 مرات عمل كومنت واخرج من الفورمه لو مش 100 ارجع تانى لباسورد
وفى نفس البوش بوتن هنعمل تريجر على مستوى WHEN-BUTTON-PRESSED

IF :PASS.V_USER IS NULL OR :PASS.V_PASS IS NULL THEN
MESSAGE('ادخل بيانات الدخول ');
MESSAGE('ادخل بيانات الدخول ');
ELSE 

CALL_FORM('ST_TREE');

END IF ;


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

الفورمه الاكبر فورمه عرض الفورم اللى مسموح للمستخدم الدخول عليها
الفورمه هى اكبر فورمه فى نظام ومكونه من 3 كانفس
نبداى باول كنفس
عبار عن شجرتين شجره للفورم الىى مسموح بيها اليوزر و شجره هى شجره فيها الفورم المفضله لل المستخدم
و جروب بوتن لتعديل فى الشجر و 2 تسبلى ايتم يو ضح ان كان فى بريد جديد ولا لا وعند الظعط علي اى عليهم يذهب الى الصندوق الوراد
هنبدى بشجره الاولى مفروض ان ماتفتح تظهر تفتح الفورم المسموح بيهات فى مستخدم مسموح له 5 فورم و واحد تانى مسموح 2 بس
هنعمل بلو ك جديد و نسمى TREE4
ونرسم الشجره ونسميها TREE4 ونعدل خاصيه sql select
ونحط الجمله دى
select 1 ,1 , FROM_NAME, null , to_char(GRO)
from V_FROM
where GRO = :GLOBAL.V_GRO AND VELAD=0
وبعد كده نعمل على مستوى الفورمه فى تريجر ده الكود ده
FTREE.POPULATE_TREE('TREE4.TREE4');
:SYSTEM.MESSAGE_LEVEL := '5';
طبعا الكود مش محتاج اى شرح
كدها اول مانفتح الشجره هتفتح بال الفورم حسب المستخدم
هناجى بقى على الشجره ونعمل الكود ده عبى مستوى التريجر WHEN-TREE-NODE-SELECTED
ونكتب الكود البسيط ده TREE.SELE_MA_TREE;
الحياه سهله اوى
طبعا ده اجراء و الكود الى جواها هو

PROCEDURE SELE_MA_TREE IS 

x number (5);
BEGIN



M.FR := Ftree.Get_Tree_Node_Property('TREE4', :SYSTEM.TRIGGER_NODE,Ftree.NODE_LABEL);
-- هنا بحمل اسم الفورمه الى ضغط عليها المستخدم فى المتغير fr
SELECT V_UPD, V_INT, V_DEL INTO M.P_V_UPD , M.P_V_INT, M.P_V_DEL
FROM V_FROM WHERE UPPER(FROM_NAME)=UPPER(M.FR) AND GRO =:GLOBAL.V_GRO ;
--- صلاحيات المستخدم على الفورمه و حملها فى متغيرات 
PR;-- ده اجرتء هيتشرح حالالا 

end ;


اما pr

PROCEDURE PR IS
PL PARAMLIST ;

BEGIN
PL:=GET_PARAMETER_LIST('PRO');
IF NOT ID_NULL(PL)THEN 
DESTROY_PARAMETER_LIST(PL);
END IF;
PL:= CREATE_PARAMETER_LIST('PRO');
ADD_PARAMETER(PL,'P_V_UPD',TEXT_PARAMETER,M.P_V_UPD);
ADD_PARAMETER(PL,'P_V_INT',TEXT_PARAMETER,M.P_V_INT);
ADD_PARAMETER(PL,'P_V_DEL',TEXT_PARAMETER,M.P_V_DEL);

CALL_FORM(M.FR,HIDE, NO_REPLACE ,NO_QUERY_ONLY,NO_SHARE_LIBRARY_DATA ,PL);
END;
-- بردك مش محتاج شرح فى الاول عملت برامتر ليست و بدين اضافات صلاحيات المستخدم الى خطها فى السيلكت الى قبل دى الجراء و اضافتها 3 برامتر هيروحو للفورمه الى هيتندى عليها
-- و بد كده عملن كول للفورمه اللى حددها المستخدم عن طريق الشجره و ححد البرامتر ليست
بعد كده الفورمه الى نادى عليها بس الياسور اى كانت شكله هنحط الكود حسب اى بلوك داتا بيز او يضمن داخله كود فيه انسيرت او ابديت حذف
على مستوى الفورمه فى تريجر WHEN-NEW-FORM-INSTANCE
IF UPPER(:PARAMETER.P_V_INT) =UPPER('V')THEN 
SET_BLOCK_PROPERTY('DEPARTMENTS', INSERT_ALLOWED, PROPERTY_TRUE);
ELSE
SET_BLOCK_PROPERTY('DEPARTMENTS', INSERT_ALLOWED, PROPERTY_FALSE);
END IF;
---------------------------------------------------------------
IF UPPER(:PARAMETER.P_V_UPD) =UPPER('V')THEN 
SET_BLOCK_PROPERTY('DEPARTMENTS', UPDATE_ALLOWED, PROPERTY_TRUE);
ELSE
SET_BLOCK_PROPERTY('DEPARTMENTS', UPDATE_ALLOWED, PROPERTY_FALSE);
END IF;

------------------------------------------------------------
IF UPPER(:PARAMETER.P_V_DEL) =UPPER('V')THEN 
SET_BLOCK_PROPERTY('DEPARTMENTS', DELETE_ALLOWED, PROPERTY_TRUE);
ELSE
SET_BLOCK_PROPERTY('DEPARTMENTS', DELETE_ALLOWED, PROPERTY_FALSE);
END IF;
:DE.WELL:='مرحبا بك'||:GLOBAL.V_NICK;-- هنا ر ساله ترحيب 


الكود مش محتاج شرح
فرضا انى مفيش فى الفورمه غير بلوك واحد هو DEPARTMENTS لو فى اكتر منكده هتكرر الكود وتغير اسم البلوك
الكود متكرر
هشرح او ل واحد بشوف عن طريق جمله if اليوز له صلاحيه انسيرت لو عندو بغير خصاشص البلوط وخلي يقدر يعمل انسيرت لو معدوش العكس وهكذا
بعض كده هط بردك على مستوى الفورمه تريجرon error
الكود ده

IF ERROR_CODE = 41051 THEN
message(' اعزيزى المستخدم ليس لديك صلاحيات لعمل انسيرت ');
message(' اعزيزى المستخدم ليس لديك صلاحيات لعمل انسيرت ');
RAISE Form_Trigger_Failure; 
END IF;

IF ERROR_CODE = 40200 THEN
message('عزيزى المستخدم ليس لديك صلاحيات لعمل تعديل ');
message('عزيزى المستخدم ليس لديك صلاحيات لعمل تعديل ');
RAISE Form_Trigger_Failure; 
END IF;
IF ERROR_CODE = 41049 THEN
message(' عزيزى المستخدم ليس لديك صلاحيات لعمل حذف');
message(' عزيزى المستخدم ليس لديك صلاحيات لعمل حذف');
RAISE Form_Trigger_Failure;
END IF;


الكود طبعا مش محتاج شرح
باقيه النظام ان شاء هبقى اكمله فى اقرب وقت .
مستنى منكم رايكم الاولى فى النظام ومستنى من المشرفين الاخطاء و نقاط الضعف خصوصا انى مرفق رابط صغير جدا لفيدو لنظام كامل
ارجو التعليق على النظام هل هو مرن كفايه لستخدمو فى اى مشروع
واسف على عدم التنسيق بس لالاسف امكانيات المشاركه مش مشغاله عندى ارجو من اى مشرف تنسيق الموضع و بنسبه لكواد لو فى مشاكل فى قراتها
انسخه على ورقه تيكست هتظبط ان شاء الله و اسف لو وجد اخطاء املاائيه بس انا بكتب بسرعه
ومستنى تعليقتك المفيده ليا اوىىىى على الفيدو وانا مش مهتم بتنسيق الفورمه المهم قوه النظام وجزاكم الله خير و جعله علم نافع لنا وخالص لوجه الله تعالى
الروابط
اسف على عدم التنسيق
http://rapidshare.co...cation.wmv.html
http://www.mediafire.com/?wqz5qctifnf
http://www.4shared.c...pplication.html

بتاريخ:


بارك الله فيك وجعله الله فى ميزان حسناتك

جارى التحميل والتجر بة

بتاريخ:

بارك الله فيك أخي ومشروع جبار ويستفيد جميع المبرمجين ؟؟؟
وأسأل الله لك داوم التقدم والنجاح,,

نتظر تكملة الموضوع يا عزيزي,,

بتاريخ:

أشكرك أخي مصطفى على مجهودك المتميز...
جزاك الله كل خير وإلى الأمام..
تحياتي.

بتاريخ:

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

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

:rolleyes:

  • بعد 2 أسابيع...
بتاريخ:
  • كاتب الموضوع

فيدو لنظام بعض التعديل يدعم اكثر من اللغه و بعض الاضافات
و على ما اظن انه بعض التعديل اصبح الاقوى على الاطلاق فى انتظار افكاركم لتطوير النظام افكار حتى بس بدون حلول برمجيه

الربط الاول الاسراع و يدعم الاستكمال
http://www.mediafire.com/?o2jnozmj1zc
http://rapidshare.com/files/400215299/FINAL.wmv.html
http://www.4shared.com/video/7wwcrHGp/FINAL.html نزل الفيدو لان لو شاهد الفيدو اون لاين مش تتفرج عليها كامل

وجزاكم الله خير

بتاريخ:

اخى مصطفى عمل جيد ونشكر لك مجهودك العظيم
ولكن نريد الباقى لتكمله وشكرا

بتاريخ:

شكراا على اضافه هذا الموضوع المميز و المفيد جداا

  • بعد 6 شهور...
بتاريخ:

[جاريييييييييييييييييييييييييي التحميل

بتاريخ:

الله يعطيك العافية يا اخ مصطفى على هذا المجهود

وربنا يجعله في ميزان حسناتك

بتاريخ:

جزاك الله خير ياأخي على الأفكار الرائعة

  • بعد 4 شهور...
بتاريخ:

بنزل الفيديو وبتفرج عليه وبإذن الله ينفعني
جزاك الله خيرا لنشر علمك

  • بعد 2 أسابيع...
بتاريخ:

جزاك الله خيرا

  • بعد 2 سنة...
بتاريخ:

السلام عليكم

هل يوجد نسخة 6i ومشكور وياليت لو فيه شاشات

تم تعديل بواسطة steam

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

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

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

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

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

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.