بتاريخ: 31 أغسطس 200520 سنة comment_46213 السلام عليكم ورحمة الله وبركاتهبعد ماكثرت الاسئلة حول كيفية استخدام الصلاحيات على الفورم وبما أنني عضو من أعضاء هذا المنتدى المتميز سأقوم بعرض طريقة أنا أستخدمها شخصيا ومن صنعي أنا وزميل لي أثناء الدراسة حيث قمنا بإنشاء FUNCTION للتاكد من صلاحية اي مستخدم يقوم بعمل الدخول على النظام وعلى اساس الصلاحية الممنوحة له تقوم باخفاء العناصر الخاصه بهذه الصلاحية.أولا:(الوظائف والامتيازات التالية تعتبر قياسية يمكنك التعديل عليها)نقوم بإنشاء وظائف مثلا: create role admin; create role data_entry; create role viewr; ثانيا:نمنح الوظائف الامتيازات التالية: grant connect,resource,dba to admin; grant select any table,update any table,delete any table,insert any table to admin; grant select any sequence, alter any sequence to admin; grant connect,resource to data_entry; grant select any table,update any table,delete any table,insert any table to data_entry; grant select any sequence, alter any sequence to data_entry; grant connect,resource to viewr; grant select any table to viewr; grant select any sequence to viewr; ثالثا:نقوم بمنح الوظائف السابقة الاستعلام من جدول الوظائف الموجود بالأوراكل: *مستخدمي ORACLE 8,8i قم بالدخول باسم المستخدم التالي (internal/oracle) وعمل التالي: grant select on dba_role_privs to admin; grant select on dba_role_privs to data_entry; grant select on dba_role_privs to viewr; *مستخدمي ORACLE9i قم بالدخول باسم المستخدم التالي (sys/sys as sysdba) تأكد من كلمة المرور حسب ماقمت بتعديله.رابعا:نقوم الآن بإنشاء المستخدمين ومنح كل حسب وظيفته: grant admin to user1 identified by u123; grant data_entry to user2 identified by u123; grant viewr to user3 identified by u123; الآن تم إنشاء الوظائف ومنحها الامتيازات ومنح الامتيازات للمستخدمين, بقي الآن دور FUNCTION التي سوف توضع في الفورمأولا:قم بفتح النموذج المراد وضع الوظائف عليهثانيا:قم بالذهاب الى Program Units واضغط على زر createإختر Function وقم بتسميتها بـ USER_ROLE ثم قم بلصق الكود التالي: FUNCTION USER_ROLE(ROLEE VARCHAR2,USERS VARCHAR2) RETURN BOOLEAN IS CURSOR V_ROLES IS SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE=UPPER(USERS); ROLES_RECORD VARCHAR2(100); BEGIN OPEN V_ROLES; LOOP FETCH V_ROLES INTO ROLES_RECORD; EXIT WHEN V_ROLES%NOTFOUND; IF ROLES_RECORD=ROLEE THEN RETURN(TRUE); END IF; END LOOP; RETURN(FALSE); END; يتم في هذه الدالة استعلام عن الوظيفة الممنوحة حسب اسم المستخدم والرجوع بهاثالثا:في نفس النموذج قم بعمل Trigger من نوع WHEN-NEW-FORM-INSTANCE ووضع الاشياء التي تريد اخفاءها على حسب اسم الوظيفة كما في المثال التالي: IF USER_ROLE('data_entry',USER) THEN Set_item_Property('CONTROL.USER_MANAGMENT', ENABLED, PROPERTY_FALSE); END IF; عند وضع تحقق لوظيفة أخرى قم بالتعديل على اسم الوظيفة والعناصر فقط بعمل ELSE IF أو IFبهذا نكون أنشأنا نظام صلاحيات (مايخرش الميه)أتمنى من الجميع أن يستفيدوا من هذه الطريقة التي ربما كون جديدة لكنها من تأليفي أنا وزميل لي أثناء فترة الدراسة والله يشهد.ترقبوا مني في الايام القادمة بإذن الله كتابة جميع أكواد إدارة المستخدمين برمجيا من دون الرجوع للـ SQL.<marquee direction=right>(أرجو من كل من يقرأ هذا الموضوع الدعاء لي بالتوفيق في الدنيا والآخرة)</marquee> تقديم بلاغ
بتاريخ: 31 أغسطس 200520 سنة comment_46221 جزاك الله خيراً أخي الحبيب ، وأسأل من الله عز وجل أن يجعلها في ميزان حسناتك إن شاء الله. تقديم بلاغ
بتاريخ: 1 سبتمبر 200520 سنة comment_46224 جزاك الله كل خير شيء يستحق الشكر على هذه الطريقة تقديم بلاغ
بتاريخ: 2 سبتمبر 200520 سنة comment_46313 الف شكر اخي على هذه المعلومات وجزاك الله عنا خير تقديم بلاغ
بتاريخ: 2 سبتمبر 200520 سنة كاتب الموضوع comment_46325 أشكر الجميع على الردود واسف بنفس الوقت على التاخير في ردي عليكم لاني مريت بوعكة صحية وأنا موجود وتحت الطلب فيما لو حدثت اي مشكلة علما اللي يمشي على الطريقة بنفس ترتيب خطواتها ماراح يلاقي اي مشاكل ان شاء الله كما اشكر القائمين على المنتدى لثبيتهم هذا الموضوع تقديم بلاغ
بتاريخ: 5 سبتمبر 200520 سنة comment_46565 اخي العزيز /aaaaمشكور على هذا الجهد الكبير و اتمنى من الله ان يقبله في ميزان حسناتك في الدنيا والآخرة وان ينفع بك و بنا في هذه الامه تقديم بلاغ
بتاريخ: 18 سبتمبر 200520 سنة comment_47529 اخي العزيز aaaaمشكور على هذا الجهد الكبير و اتمنى من الله ان يقبله في ميزان حسناتك في الدنيا والآخرة وان ينفع بك و بنا في هذه الامه تقديم بلاغ
بتاريخ: 27 سبتمبر 200520 سنة comment_48389 السلام عليكم ورحمة الله وبركاتهبارك الله فيك علي هذه المعلومات القيمة تقديم بلاغ
بتاريخ: 11 أكتوبر 200520 سنة comment_49221 السلام عليكم،،يعطيك العافية وما قصرت.لكن بإمكاني أنشيء Menu و أسند جميع الـ Roles اللي أنشأتها من دون الحاجة الى كتابة procedure و استخدام جمل الـ If .... بحيث يتم تعطيل و تفعيل الـ Menu Items حسب المستخدم و حسب الصلاحيات التي يملكها.و بالتوفيق. تقديم بلاغ
بتاريخ: 15 أكتوبر 200520 سنة comment_49506 مشكور و جزاك الله الف خير و كثر الله من امثالك يا اخي العزيز . تقديم بلاغ
بتاريخ: 7 نوفمبر 200520 سنة comment_50974 جزاكم الله كل خير وجعله الله فى ميزان حسناتكموالله انا بكتب بلغة اسمها rpg على جهاز سيرفر AS400 واعجبتنى جدا طريقة معالجة المستخدمين لانى عامل حاجة قريبة منها بس دى اشداللهم علمنا ما ينفعنا ونفعنا بما علمتناعاصم عوض تقديم بلاغ
بتاريخ: 15 نوفمبر 200520 سنة comment_51654 جزاك الله خيرا48837[/snapback] ممكن اذا سمحت تفصيل اكثر وجزاك الله خير بالتفصيل اذا تكرمت تقديم بلاغ
بتاريخ: 8 يناير 200620 سنة comment_56941 مشكور على الطريقة المميزة46265[/snapback] وجزاك الله خير الجزاء أنشاء ودمتم زخرا للأمة الأسلامية جمعا تقديم بلاغ
بتاريخ: 14 يناير 200620 سنة comment_57348 أخي الكريمشكرا لك على الطريقة العظيمة ولكن لي تعقيب عليها إن نسخ الأوراكل المتوفرة في السوق لعدد محدد من المستخدمين Named Users وكلما زاد عدد المستخدمين المسجلين في قاعدة المعطيات ازداد ثمنها بشكل كبير جدا ، لذلك وفي الأنظمة الكبيرة في مؤسسة مثلا حيث يوجد لديك مثلا 10 مستخدمين(End Users) لبرامج المالية وكل له صلاحية مختلفة عن الآخر و10 مستخدمين في برامج المحاسبة و10 في برامج المستودعات إلخ فأنت بحاجة لنسخة أوراكل لمئة مستخدم على الأقل وهذا يجعل ثمن نسخة أوراكل يصل لحدود 150000 دولار وهذا كثير جدا لذلك أنصحك في الحالات المشابهة بوضع نظام صلاحية على مستوى التطبيق وليس على مستوى قاعدة المعطيات ويكون الاتصال بقاعدة المعطيات لكل برنامج واحد عبر مستخدم واحد فقط وتتم المعالجة في التطبيق وبمساعدة جداول تحتوي على المستخدمين وصلاحياتهم .كما يمكن لك معالجة هذه المسألة بمساعدة الــ Database Triggers .وتفضل بقبول تقديري واحترامي. تقديم بلاغ
بتاريخ: 30 يناير 200620 سنة comment_58875 ألف شكرا على الطريقة هذه ،،،، وإن شاء الله يوفق في حياتك العلمية والعملية..... تقديم بلاغ
بتاريخ: 18 فبراير 200620 سنة comment_60432 السلام عليكم ورحمة الله وبركاته جزاكم الله خيراً عن هذه المعلومات المهمة أو ان اضيف طريقة أخرى شبيهة بهذه الطريقة وهي ان تكون 4 roles وتعطي كل role صلاحية معينة مثلاً:1- master هذه تعطى كل الصلاحيات اي dba .2- input هذه تعطى صلاحية الادخال والتعديل والحذف ولكن لاتعطى صلاحية الدخول علي التقارير .3-output هذه تعطى صلاحية العرض فقط اي الدخول على التقارير .3- input and output وهي تعطى صلاحية الادخال والتعديل والحذف والعرض ولكن لاتعطى صلاحيات الاخرى مثل تكوين مستخدم جديد او الغاء مستخدم او اعطاء صلاحية او عمل نسخة احتياطية من البيانات او استرجاع البيانات . عن طريق مايسمى بال synonamn. السلام عليكم ورحمة الله وبركاتهبعد ماكثرت الاسئلة حول كيفية استخدام الصلاحيات على الفورم وبما أنني عضو من أعضاء هذا المنتدى المتميز سأقوم بعرض طريقة أنا أستخدمها شخصيا ومن صنعي أنا وزميل لي أثناء الدراسة حيث قمنا بإنشاء FUNCTION للتاكد من صلاحية اي مستخدم يقوم بعمل الدخول على النظام وعلى اساس الصلاحية الممنوحة له تقوم باخفاء العناصر الخاصه بهذه الصلاحية.أولا:(الوظائف والامتيازات التالية تعتبر قياسية يمكنك التعديل عليها)نقوم بإنشاء وظائف مثلا:create role admin; create role data_entry; create role viewr; ثانيا:نمنح الوظائف الامتيازات التالية: grant connect,resource,dba to admin; grant select any table,update any table,delete any table,insert any table to admin; grant select any sequence, alter any sequence to admin; grant connect,resource to data_entry; grant select any table,update any table,delete any table,insert any table to data_entry; grant select any sequence, alter any sequence to data_entry; grant connect,resource to viewr; grant select any table to viewr; grant select any sequence to viewr; ثالثا:نقوم بمنح الوظائف السابقة الاستعلام من جدول الوظائف الموجود بالأوراكل: *مستخدمي ORACLE 8,8i قم بالدخول باسم المستخدم التالي (internal/oracle) وعمل التالي: grant select on dba_role_privs to admin; grant select on dba_role_privs to data_entry; grant select on dba_role_privs to viewr; *مستخدمي ORACLE9i قم بالدخول باسم المستخدم التالي (sys/sys as sysdba) تأكد من كلمة المرور حسب ماقمت بتعديله.رابعا:نقوم الآن بإنشاء المستخدمين ومنح كل حسب وظيفته: grant admin to user1 identified by u123; grant data_entry to user2 identified by u123; grant viewr to user3 identified by u123; الآن تم إنشاء الوظائف ومنحها الامتيازات ومنح الامتيازات للمستخدمين, بقي الآن دور FUNCTION التي سوف توضع في الفورمأولا:قم بفتح النموذج المراد وضع الوظائف عليهثانيا:قم بالذهاب الى Program Units واضغط على زر createإختر Function وقم بتسميتها بـ USER_ROLE ثم قم بلصق الكود التالي: FUNCTION USER_ROLE(ROLEE VARCHAR2,USERS VARCHAR2) RETURN BOOLEAN IS CURSOR V_ROLES IS SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE=UPPER(USERS); ROLES_RECORD VARCHAR2(100); BEGIN OPEN V_ROLES; LOOP FETCH V_ROLES INTO ROLES_RECORD; EXIT WHEN V_ROLES%NOTFOUND; IF ROLES_RECORD=ROLEE THEN RETURN(TRUE); END IF; END LOOP; RETURN(FALSE); END; يتم في هذه الدالة استعلام عن الوظيفة الممنوحة حسب اسم المستخدم والرجوع بهاثالثا:في نفس النموذج قم بعمل Trigger من نوع WHEN-NEW-FORM-INSTANCE ووضع الاشياء التي تريد اخفاءها على حسب اسم الوظيفة كما في المثال التالي: IF USER_ROLE('data_entry',USER) THEN Set_item_Property('CONTROL.USER_MANAGMENT', ENABLED, PROPERTY_FALSE); END IF; عند وضع تحقق لوظيفة أخرى قم بالتعديل على اسم الوظيفة والعناصر فقط بعمل ELSE IF أو IFبهذا نكون أنشأنا نظام صلاحيات (مايخرش الميه)أتمنى من الجميع أن يستفيدوا من هذه الطريقة التي ربما كون جديدة لكنها من تأليفي أنا وزميل لي أثناء فترة الدراسة والله يشهد.ترقبوا مني في الايام القادمة بإذن الله كتابة جميع أكواد إدارة المستخدمين برمجيا من دون الرجوع للـ SQL.<marquee direction=right>(أرجو من كل من يقرأ هذا الموضوع الدعاء لي بالتوفيق في الدنيا والآخرة)</marquee> 46213[/snapback] تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.