السلام عليكم ورحمة الله
اخواني انا بصدد عمل مشروع ويكون فيه صلاحيات للمستخدمين ويمكن للمدير تغيير باسورد الموظفين وعمل عضوية جديدة للبرنامج اتمنى منكم المساعدة
ملاحظة المشروع يستعمل:
C#.net
sql server
وجزيتم خيرا
عمل صلاحيات للمستخدمين بالسي شارب
وعليكم السلام أخي الكريم.
هناك عدة مواضيع في المنتدى بنفس المحتوى. فقط قم بالبحث
بالتوفيق.
• • •
[ ربيّ احفظ سوريا الحبيبة]

اخي اذا وجدت رابط ياليت ترفقه لاني بحثت ولم اجد !
السلام عليكم و رحمة الله و بركاته
أخي طلال أريد أن أقول لك أن قصدت فكرة من أكثر الأفكار صعوبة في تطوير البرامج من حيث التحقيق البرمجي .. و سأقول لك أنني أمضيت فترة طويلة جداً فيما مضى أبحث عن الطريقة الأكثر جدوى لذلك من صلاحيات على مستوى قواعد البيانات إلى صلاحيات على مستوى الـ GUIs و غيرها ..
صراحة وجدت أنه لا يوجد طريقة يمكن القول أنها Perfect و لكن سأوجهك إلى ما أعتقد أنها طريقة عملية إلى حد كبير, لكن عليك أن تتنتبه لما يلي:
أولاً: الاعتماد على الصلاحيات من جهة قواعد البيانات فحسب لا يكفي و سيصعب عليك كثيراً تحقيق الربط بين صلاحيات قاعدة البيانات و الواجهات.. أنا شخصيا جربت هذه الطريقة في الماضي و كانت بمثابة (nightmare) مع أنها نجحت إلى حد ما لكنها لم تكن عملية للبرامج (أكاديمية بشكل بحت)
ثانياً: هناك عيب آخر يضاف للطريقة السابقة الذكر وهو أن هناك نوع من الصلاحيات لا يرتبط فقط بقاعدة البيانات بل ببعض الـ Processes في برنامجك .. على سبيل المثال: المستخدم (X) لا يحق له طباعة الفواتير
ثالثاً: تقسم أنواع الصلاحيات (حسب دراستي الطويلة لها) إلى نوعين رئيسيين هما:
1- صلاحيات الأغراض
كل غرض (كائن) في نظامك له (ID) محدد سواء كان رقم أو GUID أو خلافه.. و يرتبط بذلك الغرض عدة صلاحيات (View, Edit, Delete, ...etc) و يمكنك تخزين ذلك في قاعدة بيانات على النحو التالي:
مستخدم | نوع غرض | رقم الغرض (ID) | صلاحية | القيمة
سمير | فاتورة | 2345 | تحرير | Grant
سمير | فاتورة | 2652 | تحرير | Deny
و عند محاولة المستخدم سمير تحرير الفاتورة ذات الرقم 2652 فإن البرنامج سيمنعه من ذلك. و حتى أنك ربما لن تحتاج إلى تخزين الـ Grant .. طبعاً ذلك يعتمد على ما أسميه "منطق الصلاحيات" الذي يتعلق بتداخل الصلاحيات على مستوى المجموعة و المستخدم و أنصحك في الوقت الراهن بالتركيز على صلاحيات المستخدمين فقط كي لا تشوش ذهنك بتعقيدات تداخل الصلاحيات.
2- صلاحيات العمليات
ليست مرتبطة بأي غرض و إنما عبارة عن مجموعة (Operations) يقدمها لك البرنامج .. مثلاً: إضافة فاتورة, تحرير فاتورة, طباعة مستند, مشاهدة تقرير المبيعات, ... إلخ
ببساطة تشبه كثيراً صلاحيات البيانات من ناحية بنية قاعدة البيانات عدا عن كونها لا ترتبط بغرض محدد و يمكن تمثيلها بجدول بسيط كالتالي:
مستخدم | الصلاحية | القيمة
سمير | طباعة فاتورة | Grant
سمير | مشاهدة تقرير المبيعات | Deny
و عند طلب أي مهمة تستطيع فحص الجدول آنف الذكر لتعرف هل للمستخدم الحق في تنفيذ تلك المهمة ام لا..
هناك ما يرتبط أيضا بتطبيق الصلاحيات على الواجهات .. هذا الموضوع معقد للغاية بالنسبة لك رغم أنني حققته برمجياً عن طريق Mapping (ربط) الصلاحيات المخزنة في قاعدة البيانات مع خصائص الأدوات على الواجهات (GUIs) و استخدام الـ Refliction في الدوت نت لتطبيقها بشكل ديناميكي في الـ Form_Load Event بحيث تخفي أدوات أو تعطل أزرار و قوائم بناء على قيم الصلاحيات المطبقة على ذلك المستخدم.
بكل الأحوال حاول أن تحدد الفكرة التي تريد تطبيقها في ضوء ما أرشدتك إليه و ستنجح بإذن الله.
بالتوفيق
تم تعديل هذه المشاركة بواسطة imadouzoun في 19 ديسمبر 2013 في 08:10
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone
بارك الله فيك اخي الغالي على ردك الرائع وانا مبرمج مبتدئ واريد عمل البرنامج تجارياً والبرنامج واقف الان على هذه النقطة
وانا بصدد بيعه لاكثر من عميل فكيف يمكني عمل باسورد خاص لكل عميل ؟؟؟! وكيف استرجعة اذا نسيه العميل
اتمنى التجاوب معي بحكم معرفتي البسيطة وجزاك الله خير الجزاء
كلمة السر تكون في قاعدة البيانات ويمكن تشفير كلمة السر ويكون مفتاح التشفير معك
سبحانه الله وبحمده سبحانه الله العظيم
if (You Love ArabTeam2000 ) MessageBox.Show("All ArabTeam2000 Love You"); else MessageBox.Show("go to your mama"); Make it run, make it right, make it fast, make it small
normalize your data and don't make it look like excel sheet
الأبداع في الرأس والعلم في الكراس
روابط مفيدة
[دروس] تجاهل الwhere
طريقة الاضافة للجدولين مرتبطين مرة واحدة
قراءة صوره من مسار
حل مشكلة الارقام العربي في الكريستال ريبورت
حل مشكلة تصدير OLE Object الي Physical File مرة أخري
كود عمل نسخة يومية من قاعدة البيانات بتاريخ مع حذف النسخة السابقة من 30 يوم مضي
معظم دوال التعامل مع string
Change Data Capture
SQL Course
string-format-datetime
LINQ to SQL in C#
Sum-of-previous-row-values-in-SqlServer
alarm-for-stop-agent-service
SQL Server CTE
اها بارك الله فيك ممكن تدلني على الطريقة الله يسعدك
اتمنى التجاوي معي يا اخواني الافاضل
اتمنى من الاخ الكريمKARIMSOFT
ذكر طريقته للضروره
السلام عليكم ،
انا استخدم هذه الفكرة وهي جيدة جداً
1- قم بانشاء جدول بقاعدة البيانات ليخزن بيانات المستخدمين USERData واضف فيه حقل نص لنوع المستخدم USERT
2- عند انشاء فورم لتسجيل مستخدم جديد اجعل اداة ادخال البيانات لحقل نوع المستخدم combobox واضف بها قيمتين او اكثر حسب استخدامك ( مدير ، مستخدم )
3- انشئ class لحفظ اسم المستخدم ونوعه مؤقتاً اثناء تشغيل البرنامج
public static string USERNAME;public static string USERT;
4- عند فورم تسجيل الدخول ابحث في جدول المستخدمين هل نوع المستخدم (مدير ) ام (مستخدم) وهي القيمة التي ستكون مخزنة في USERT
5- خذن القيمة التي حصلت عليها ( مدير ام مستخدم ) وارسلها للـ class
Publics.USERNAME = ("" + reader.GetValue(1));
Publics.USERT = ("" + reader.GetValue(2));6- عند الدخول علي صفحة من صفحات المدير او عند اجراء اي عملية غير مسموح بها للمستخدمين غير المدراء اسأل هل القيمة المخزنة في Publics.USERT هي ( مستخدم ام مدير)
string S_USERT = Publics.USERT ;
if (S_USERT == "مدير")
{
goto Code2;
}
else
{
MessageBox.Show("لا تملك صلاحيات لاجراء هذه العملية ! ");
return;
}
Code2:
// هنا كود للعملية المراد اجراءهافإذا كانت مدير اجعله يدخل ام اذا كانت غير ذلك اظهر رسالة توضح فيها ان ليس له صلاحيات ..
بالتوفيق
تم تعديل هذه المشاركة بواسطة كارم سامي في 29 ديسمبر 2013 في 18:34
يعطيك الف الف الف عافية يارب لكن لو المدير و الموظف نسي الباسورد كيف اتعامل مع البرنامج كمبرمج؟؟؟
لو الموظف نسي كلمة المرور => المدير يطرده
لو المدير نسي كلمة المرور => المدير يرمي نفسو من البلكونة
و هذا الحل الأمثل برأيي الشخصي....................
لكن إذا أردت فعلاً حل بسيط جدا .. أنشئ مستخدم (Built-in) للبرنامج على غرار المستخدم Administrator و ضع له كلمة مرور لا يعرفها إلا أنت ..
و ستجعل هذا الحساب للإستخدامات الطارئة ليستخدمه المدير و يدخل إلى البرنامج و يغير كلمة مرور حسابه عندما ينساها.
تحياتي
تم تعديل هذه المشاركة بواسطة imadouzoun في 30 ديسمبر 2013 في 16:46
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone