PDA

View Full Version : مبتدی: برنامه درخواست مرخصی در یک شرکت کوچک و تعیین سطح دسترسی ها;



pimigi
سه شنبه 15 مرداد 1392, 17:01 عصر
سلام مهندسین
می خوام یه نرم افزار راه بندازم که کارمندها با یوزر پس خودشون وارد شن و برای درخواست مرخصی دو تا فرم مرخصی روزانه و ساعتی داشته باشن و فرم رو پر کنن، می خوام در غالب یک نوتیفیکیشن به دو تا سرپرست در آن واحد فرستاده بشه و اونها با امضا هاشون مرخصی رو تایید کنن.

*مشکل من تو سطح دسترسی هاست (در آینده به نرم افزار تب های زیادی اضافه میشه) ، چطوری یک سری آیتم ها رو واسه کارمندای عادی پنهون کنم؟

* کلن راه های پیشنهادی دوستان چیه واسه این نرم افزار؟

108625

parvizwpf
سه شنبه 15 مرداد 1392, 17:18 عصر
http://mkdot.net/community/mknetug/mk_sp/b/zzl/archive/2008/04/08/using-the-built-in-asp-net-membership-provider-in-windows-forms-or-console-applications.aspx

veniz2008
سه شنبه 15 مرداد 1392, 19:15 عصر
*مشکل من تو سطح دسترسی هاست (در آینده به نرم افزار تب های زیادی اضافه میشه) ، چطوری یک سری آیتم ها رو واسه کارمندای عادی پنهون کنم؟

سلام.
با توجه به اینکه دوستان زیادی همچنان با تعیین سطح دسترسی برای پروژه هاشون مشکل دارند در این پست این مطلب رو کامل توضیح میدم :
روند کار شما دو مرحله هست. 1: مشخص کردن سطح دسترسی برای هر کاربر 2: اعمال کردن این محدودیتها در هنگام لاگین هر شخص.
یکی از روش های پیاده سازی میتونه اینطوری باشه:
برای مورد 1 : یک جدول که سطح دسترسی اشخاص رو مشخص میکنه نیاز دارید.ستون های این جدول نام کاربری و تعداد منوها (یا در صورت نیاز زیر منوها) هست. یعنی اگر در برنامه شما 5 منو وجود داره که هر منو هم 3 زیرمنو داره اگر میخواید برحسب منو کاربر رو کنترل (اجازه یا عدم اجازه) کنید باید علاوه بر نام کاربری 5 تا ستون دیگه هم ایجاد کنید و اگر میخواید بر حسب زیر منو کاربر رو کنترل کنید بایستی 5*3 = 15 فیلد ایجاد کنید.
فیلدها رو از نوع bit در نظر بگیرید (اگر تیک نداشته باشه یعنی false و اجازه دسترسی به اون منو رو نداره).
روش دیگه میتونه بر حسب سمت شغلی باشه.
در اینجا دو جدول نیاز هست : جدول اول شبیه جدول بالاست فقط به جای نام کاربری باید سمت شغلی مشخص بشه . و جدول دوم میشه نام کاربری و سمت شغلی. خوبی این روش اینه که یکبار برای هر سمت شغلی، محدودیت ها تعریف میشه و بعد از اون فقط برای یک شخص سمت شغلیش رو مشخص میکنیم. (زمانیکه تعداد کاربران و تعداد منوها(یا زیرمنوها) زیاد باشن، این روش به مراتب به صرفه تر هستش چون فضای به مراتب کمتری گرفته میشه).
حالا هنگام لاگین ، اگر کاربر یوزر و پسورد رو درست وارد کرد، میرید از جدول سطح دسترسی، رکوردش رو میخونید و بصورت زیر بر روی منوها (یا زیرمنوها) اعمال می کنید(کد زیر برای زیر منو ها هست، در ادامه برای منوها هم کد رو میزارم):

M00.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M00"].ToString());
M01.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M01"].ToString());
M10.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M10"].ToString());
M11.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M11"].ToString());
M12.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M12"].ToString());


برای غیر فعال کردن منوها هم میتونید از کد زیر استفاده کنید(اگر در جدول برای تعیین سطح دسترسی به جای زیر منو از منو استفاده کردید):

menuStrip1.Items["M0"].Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M0"].ToString());
توجه : من برای راحتی کار خودم نام فیلدها و نام منوها در فرم رو یکسان در نظر گرفتم. منظور از M00 یعنی اولین زیرمنو در اولین منو. منو اول من M0 هست و منوی بعدی M1 و ...
توضیحات بیشتر :
وقتی یک شخص یوزر و پسورد رو صحیح وارد میکنه، باید برید داخل جدولی که سطح دسترسی رو نگهداری میکنید. اونجا یک select میزنید:

select * from TblAccessLevel where UserID = @userid
منظور از userid@ همون نام کاربری صحیح هست که کاربر باهاش لاگین کرده. نتیجه select بالا میشه یک رکورد که میگه وضعیت هر منو برای اون شخص چطوره (True یا False ).
اگر هم از روش دوم استفاده کردی یعنی دو جدول داری که یکی شامل (کد) سمت شغلی و فیلدهایی به تعداد منوها(یا زیرمنوها) و جدول دوم هم میشه نام کاربری و (کد) سمت شغلی. در این حالت select شما بصورت زیر میشه:

select * from tbl1 inner join tbl2 on tbl1.JobID = tbl2.JobID where UserID = @userid
موفق باشید.

pimigi
چهارشنبه 16 مرداد 1392, 18:39 عصر
مرسی از ونیــــز عزیز، چون مبتدی هستم میدونم باید خیلی کلنجار برم تا پیادش کنم :( اگه بخوام پیغام درخواست مرخصی رو به مدیر بدم باید چجوری برم جلو؟ مدیونت میشم اگه کمکم کنی.. #C

mousa1992
چهارشنبه 16 مرداد 1392, 18:49 عصر
اگه اشتباه نکنم مبحثی هست به نام SqlDependency که میتونی با انجام تغییرات در بانک عملیاتی رو انجام بدی ( شبیه رویداد ها ) شما میتونی با همین کلاس کار کنی و زمانی که کارمند فرم درخواست مرخصی رو ثبت کرد به کسانی که باید تایید کنند اطلاع بده و این ی راه بود ی راه دیگه اینه که با استفاده از سوکت اطلاعات رو انتقال بدید بین سیستم ها
با شبکه سروکار دارین و بانک های اطلاعاتی اگه مبتدی هستین و تابحال پروژه ای رو انجام ندادینو میخواین این پروژه رو برای کسی انجام بدین توصیه میکنم قبولش نکنین

موفق باشی

davidrobert
چهارشنبه 16 مرداد 1392, 19:00 عصر
برادر من همچین فایلی رو درست کردم دانلود کن بدردت میخوره. این همون کدی هستش برای سطح دسترسی که هر کاربر بتنوی بعضی از صفحات رو ببینه و بعضی از فرم ها رو نتونه ببینه. که دکمه مورد نظر رو نمایش بدی برای هر کار و برای بعضی از کار برها بر حسب سطح دسترسی نشون ندی. فقط اطلاعات دیتابیس رو خالی کن و بعد برنامه رو اجرا کن http://barnamenevis.org/showthread.php?409640-%DB%8C%D8%A7%D8%AF-%D8%AF%D9%87%DB%8C-%DA%A9%D8%AF-%D9%87%D8%A7%DB%8C-%D8%A8%D8%AF%D8%B1%D8%AF-%D8%A8%D8%AE%D9%88%D8%B1-%D9%88-%D8%A7%D8%B5%D9%84%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE تا بعضی از امکانات برنامه رو ببینی.

danialafshari
دوشنبه 21 مرداد 1392, 08:55 صبح
سلام
همه ی اینها در سایت موجوده و می تونید جستجو کنید
برای سطح دسترسی هم شخصا در نمونه برنامه های کوچک و مفيد در سي شارپ (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE) سورس گذاشتم که تاپیک های تکراری ایجاد نشه، می تونین دریافت کنید
تیم مدیریت به سختی پیگیر قوانین بوده و عنوان های تکراری و خلاف قوانین سایت رو که باعث سر درگمی در سایت میشه رو حذف می کند
لطفا قبل از ایجاد تاپیک، هم در گوگل هم در جستجوی پیشرفته سایت جستجو کنید چنانچه نیافتید تاپیک بزنید
در غیر این صورت عواقب پاک شدن تاپیک با ایجاد کننده است
دوستان هم لطف کنن در صورت تکراری یا خلاف قانون بودن تاپیک رو با (آگاه کردن مدیریت از مخالفت) اعلام کنن، تمامی پیام ها بررسی میشود
در صورت مشاهده تاپیک های تکراری از دادن تذکر و پاسخ حتی المقدور اجتناب کرده و از (آگاه کردن مدیریت از مخالفت) استفاده کنند