الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استخدام Session في إدارة الصلاحيات

مغلق
بدأه هيثم خياط في 19 يونيو 2007 · 14 رد · 1,774 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أستخدم حاليا طريقة شخصية في إدارة صلاحيات أحد الأنظمة وأقوم بعمل التالي:

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

Dim strName As String = HttpContext.Current.User.Identity.Name.ToString()

واتحقق ان كان موجودا في جدول المستخدمين أم لا. وفي حالة أنه مستخدم مسجل أقوم بمنحه Session

Session("username") = strName

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

Response.Redirect("/users/Default.aspx")

في حالة عدم وجوده لا يحصل على Session أقوم بتحويله مباشرة الى صفحة خارج النظام

Response.Redirect("na.aspx")

في صفحات النظام الداخلية استدعي الكود التالي والذي يتأكد ان كان لديه Session ام لا

 If Session("username") = "" Then Response.Redirect("Default.aspx")

وهنا لدي سؤالين:

الأول: بالطبع لما يحصل المستخدم على Session فانه في نفس الوقت يمكن أن يتصفح أي مجلد آخر لو عرف ب وكتب العنوان يدويا لأنه حاصل على Session على مستوى المشروع.

الثاني: ما هي عيوب هذه الطريقة؟ وما هي مقترحاتكم لتطويرها؟

شكرا جزيلا

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#2

ليك الطريقة كويسة كتير وحلوة

اقتباس
الأول: بالطبع لما يحصل المستخدم على Session فانه في نفس الوقت يمكن أن يتصفح أي مجلد آخر لو عرف ب وكتب العنوان يدويا لأنه حاصل على Session على مستوى المشروع.

أنا بدي قلك شغلة انو في مواقع الانترنت لا يمكن أن يتصفح أحد مجلدا معينا باسمه

بل صفحات ... صح

طيب لو عرف اسم الصفحة شو منساوي ؟

الحل بسيط وهو أن نتفقد صلاحياته في كل صفحة :

مخول : ما في مشكلة

غير مخول : يالله على صفحة تسجيل الدخول

الموضوع بسيط

نظامك حلو ومدروس بطريقة حلوة

شرحك كتير وافي وعجبني.

انت مستخدم (متل ما أنا فهمت) شي اسمو Role وهادا شي حلو كتير

الله يوفقك يا رب

#3

أستخدم طريقة مماثلة لطريقتك .. وهي ناجحة 100%

فقط حاول تعطي الSession اسم مختلف وغريب وذلك لتفادي وجود مشروع يعمل على نفس الاسم بالذات username

#4

الإخوة Arwany / Scoool

شكراعلى ردودكم المشجعة :)

لكن خلوني أوضح مسألة تصفح المجلد. الان لنفرض عندي 3 مجموعات كالتالي:

1- المستخدمين ويتصفحون المجلد:

("/users/Default.aspx

2- المدراء ويتصفحون المجلد:

("/management/Default.aspx

3- مدير النظام ويتصفح المجلد:

("/administration/Default.aspx

والمشكلة يا أخي / Scoool بأن المستخدم بعد الحصول على Session مهما كان اسمه وعرف اسم مجلد مدير النظام مثلا فهو بهالحالة يقدر يستعرض MasterPage لهذا المجلد.

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

الأولى: هل لديه Session؟

الثانية: صلاحية المستخدم فان كانت على غير المجلد الحالي فيتم إعادة توجيهه

صح كذا؟ اذا كان كذلك، أعتقد من الأفضل أن أعمل كلاس خارجي لاستدعاء كود التأكد من الصلاحية في كل زيارة للصفحة؟

أطيب تحية،،

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#5

الحلو فيك انو بتفهم عالطاير

الله يوفقك يا رب

#6

في طريقة أخرى سأضيفها ك Hint .. ممكن انت تستخدم MasterPage و يكون هناك Load لكنترول معين ..

طبعا يكون في كنترول للمدير و كنترول للمشرف و كنترول للمستخدم مثلا وكل واحد به خصائص مختلفة حسب صلاحيات كل شخص

عند فحص ال Session يتم معرفة أي كنترول سيتم تحميلها و عرضها و هكذا

موفقين جميعا

You can fly while you can touch the sky

#7

الأخ/ Arwany

شكرا للمرور مرة أخرى

الأخ / محمد خليل

hint واضح ومباشرة للهدف. شكرا لك.

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#8

فكرة ممتازة

وهيك بتصير ال صفحات المتعددة صفحة واحدة (One MasterPage)

بس برأيي الشخصي هالطريقة حلوة وبدها شغل أكتر بشوي

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

وكل واحد مستلم صفحة

تم تعديل هذه المشاركة بواسطة Arwany في 20 يونيو 2007 في 10:50

#9

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

مثلا لوتوجه بالكتابة اليديوية إلى الصفحة التالية:

administratio/whatever.aspx

والمفترض أن لا يدخل المجلد administration اوا لعكس بأن يكون المستخدم فعلا في المجلد الصحيح.

سؤالي أولا كيف أعرف path اللي موجود فيه المستخدم؟

وثانيا هل هناك منطق آخر للتأكد بانه في المجلد الصحيح؟

شكرا للجميع على المشاركة.

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#10

السلام عليكم

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

شوف اخي انا اقلك طريقة

اولا نفحص ان كان المستخدم موجود في جدول المستخدمين العاديين نعطيه Session ويكون هكذا مثلا

Session["Uname"]=True;

ونفحص ان لم يكن الاسم موجودا في قائمة المستخدمين نفحص ان كان في جدول المدراء وان كان بالفعل موجودا نعطيه Session باسم اخر وليكن مثلا

 Session["ModName"]=True;

ثم نضع في صفحة الادمن مثلا شرط يفحص ان كان ال Session["ModName"] يساوي True وطبعا نضع الشرط عند فتح الصفحة يعني Page Load

وان لم يتحقق الشرط يقوم بالتحويل الى الصفحة الرئيسية

ونفس الشئ نعمله بالصفحة المخصصه للمستخدم

ان كان يملك Session["Uname"] يساوي true وان لم يتحقق الشرط طبعا نعمل تحويل لصفحة التسجيل او الصفحة الرئيسية

هذا ما استخدمه واعتقد طريقة جيده

بالتوفيق

#11

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

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

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

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

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

#12

شكرا لكم يا شباب

إجابة واضحة وفي الصميم. وسوف أقوم بتجربتها.

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#13

ولكن أخواني أنا أعاني من أن السيشن نفسها تدمر - distroy- في بعض الحالات - دون تدخل من المبرمج أو المستخدم

فما هي الضمانات في الاعتماد على السيشن في إدارة نظام للصلاحيات؟

#14

عزيزي الأخ shramroasp

إن ال Session هي متحولات لها فترة صلاحية

ولكن اذا كانت تفقد قيمتها بعد دقيقة مثلا أثناء تطوير المشروع فهذا الأمر عادي

حيث أن تعديل ملف web.config أو مثلا تعديل صفحة معينة أو أي عمل (ليس كافة الأعمال) ضمن تطوير الموقع قد يؤدي لزوال Session

فهذا الأمر عادي

حاول تجربتها على IIS أو على Compiled Version وان شاء الله لن تواجه المشاكل

ملاحظة : تأكد من اعداداتها كما يلي:

مثلا ضمن system.web في ملف الاعدادات أنا أضع الاعدادات:

<sessionState mode="InProc" cookieless="false" timeout="30"/>

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

#15

استخدم ال roles افضل من ال session

وبعدها تستخدم صلاحيا rules على كل role

تم تعديل هذه المشاركة بواسطة macnux في 8 يوليو 2007 في 00:58

هذا الموضوع مغلق.

مواضيع مشابهة