PDA

View Full Version : سوال: تعریف مدیر و تعیین مجوزهای دسترسی برای هر مدیر توسط مدیر اصلی



asma69
شنبه 21 شهریور 1394, 16:20 عصر
با سلام و خسته نباشین....
راستش من راجب تعیین سطح دسترسی در php سوال داشتم...

من تا حالا چندتا برنامه کوچیک نوشتم اما هیچ کدوم سطح دسترسی چندگانه نداشته و
فقط تنها مدیر میتونه وارد بخش مدیریت شه...


اما جدیدا میخوام ی برنامه دیگه بنویسم و میخوام برای برنامم سطح دسترسی تعیین کنم و
چندین مدیر داشته باشم...

تو نت سرچ کردم اما بیشتر جاها گفته بود ک بیایم سه تا سطح دسترسی تعریف کنیم و
مدیر بتونه یوزر های ایجاد شده رو در یکی از این سه سطح قرار بده.....

اما این روش مورد استفاده من قرار نمی گیره و من میخوام مدیر سایت این امکان رو داشته باشه
که به تعداد دلخواه مدیر یا یوزر جدید دیگه تعریف کنه و دسترسی های متفاوت برای هر یوزر انتخاب
و ایجاد کند....و میزان دسترسی هر یوزر جدید به تک تک امکانات بخش مدیریت رو مدیر اصلی تعیین کنه...

ینی تعیین کنه ک این یوزر به چ بخشهایی دسترسی داشته باشه...شاید من مدیر بخوام مدیر دیگه ای
ک تعریف کردم، به ی امکانی ک قبلا اجازه دسترسی داشته، امروز دسترسی نداشته باشه و بالعکس......

با کمی سرچ و فکر به ی نتایجی رسیدم و به طور تست روی یک صفحه این روش رو پیاده سازی کردم،
اما نمیدونم ک راه حلی ک برای این نوع سطح دسترسی به کاربردم درست است یانه....

برای همین تصمیم گرفتم کارهایی ک انجام دادم رو در اینجا توضیح بدم و
ممنون میشم اگه دوستان راهنماییم کنن و بگن ک آیا این روش من درسته یا نه....

تصویر زیر، صفحه مدیر اصلی هست ک پس از لاگین نمودن، وارد این صفحه مدیریت میشه..

135180

همانطور ک میبینید در این جا هفت تا لینک برای مدیر اصلی نمایش داده شده و
در زیر لینک ها بخش ثبت مدیر وجود داره...ک این مدیر میتونه در این بخش مدیرهای دیگری رو اضافه کنه..

من در این مثال ساده جوری در نظر گرفتم ک مدیر بتونه برای سایر مدیرها امکان دسترسی
به لینک های بالا رو کم و زیاد کنه و به طور مثال ی مدیر به 5 تا لینک دسترسی داشته باشه
و یکی به 2تا و یکی به 4 تا و همینطور دلخواه دسترسی تعیین کنه......

مدیر اصلی در بخش ثبت مدیر....شماره ملی ...نام ...نام کاربری ...رمز ورود مدیر جدید را باید وارد نماید
و سپس مجوزهای دسترسی مدیری ک میخواهد جدید ایجاد شود را با انتخاب تیک هر مجوز، به مدیر جدید انتساب دهد...

من در این مثال 7تا لینک در بالای مدیریت دارم..ک غیر از لینک خروج، برای
بقیه لینک هام میخوام امکان دسترسی مدیرها به هرکدوم از لینک ها رو توسط مدیر اصلی فعال یا غیر فعال کنم......
برای این کار در بخش ثبت مدیر تمام لینک های بالا رو به صورت چک باکس قرار دادم.....
ک مدیر بتونه واسه مدیرهایی ک ایجاد میکنه، مجوزها رو فعال و غیرفعال کنه...

در جدول دیتابیس هم به تعداد تمام مجوزها فیلد جدید تعریف کردم....
در دیتابیس یک جدول مدیریت دارم و یک جدول دسترسی ها....
که تو جدول مدیریت مشخصات مدیر جدید به غیر از مجوزهاش ثبت میشه....
و با یک فیلد level ک مقدار 0 یا 1 می گیره تعیین میکنم ک ایا مدیر اصلی هست یا مدیری ک مدیر اصلی ایجاد کرده....

در جدول دسترسی ها هم فقط شماره مدیر + به ازای تمام دسترسی ها فیلد قرار دادم....
در این مثال 6 تا دسترسی دارم پس 6 تا فیلد به ازای هر کدوم ایجاد کردم.....
مثلا برای تماس با ما فیلد connect یا برای درباره ما فیلد about الی اخر....

زمانی ک مدیر دسترسی مدیر جدید رو با انتخاب تیک ها تعیین
و بعد دکمه افزودن مدیر رو میزنه...اطلاعات برای مدیر جدید در دیتابیس ثبت میشه.....
و هر دسترسی که تیک خورده باشه، در جدول دسترسی ها مقدار فیلدش برابر با 1 میشود...
ینی به این امکان دسترسی دارد.

در مثال زیر مدیر قصد ایجاد مدیری به اسم reza را دارد که
برای این مدیر فقط گزینه های تماس با و درباره ما و اطلاعیه و اخبار
را انتخاب کرده است..ینی reza فقط به این لینک ها دسترسی دارد و
به لینک های آپلود و ثبت مدیر و تنظیمات دسترسی ندارد....
پس از انتخاب دکمه ی ثبت، reza با این دسترسی ها ایجاد میگردد...

و برای reza مقدار فیلدهای تماس با ما و درباره ما و اطلاعیه و اخبار در جدول
برابر با 1 می گردد...ینی دسترسی دارد و بقیه فیلدها برابر با 0 میگردد ینی دسترسی ندارد.

135181
در این صورت reza پس از لوگین نمودن وارد صفحه مدیریت با امکانات تصویر زیر میگردد.

135182
درزمان نمایش لینک ها در صفحه مدیریت هم به هر لینک یک id اختصاص دادم که
برابر با مقداریست ک در دیتابیس وجود دارد......مثلا id لینک تماس باما هست connect.....
و برای تماس با ما در جدول هم فیلدی با نام connect ساختم.....

البته این برابر بودن id با نام فیلد جدول رو برای راحتی کارخودم انجام دادم ک اسم ها و مجوزها رو فراموش نکنم.....

در صفحه مدیریت اومدم به ازای مدیری ک وارد شده براساس شماره و نام کاربری و....
مجوزهای مدیر وارد شده رو با دستور سلکت از دیتابیس فراخونی و در متغیری با همان نام قرار دادم...

سپس قبل نمایش هر لینک چک کردم که اگر مقدار متغیر برابر با 1 باشد، لینک را نمایش دهد..
ینی این مدیر به این لینک دسترسی دارد و باید لینک تماس با ما برایش نمایش داده شود.....


به ترتیب برای نمایش تمامی اشیا یا لینک هایی ک امکان تعیین دسترسی براشون وجود داشته به همین روش عمل کردم....
ک در تصویر زیر کدش رو قرار دادم..

135183

یا مثلا من میخواستم بخش ثبت مدیر فقط برای مدیر اصلی نمایش داده بشه و
سایر مدیر ها نتونن اون بخش رو ببینن و دسترسی داشته باشن...
برای همین قبل نمایش دایو مربوط به ثبت مدیر، اومدم مقدار level رو با دستور سلکت
از دیتابیس چک کردم و گفتم اگه مقدار level مدیر وارد شده در جدول برابر 1 بود ینی مدیر اصلیه و این بخش رو چاپ کنه.......

////////////////////////////////////////////////////////////////////////////////////////////////////
این کل روشی بود ک من برای نمونه تو یک مثال خیلی کوچیک برای این نوع سطح دسترسی به ذهنم رسید
و استفاده کردم و البته جواب هم داد و درست کارمیکنه.....

اما چون روش پیچیده و دارای جزعیاتی هست و باید تک تک مجوزها در دیتابیس ثبت شه و موقه نمایش هر بخش هم قبلش مقدار مجوز برای اون مدیر از دیتابیس چک بشه و در کل کار زیادی داره، با خودم گفتم ک شاید درست نباشه.....

برای همین خواستم اینجا از دوستانی ک در زمینه phpو سطح دسترسی کارکردن بپرسم ک برای ایجاد این نوع سطح دسترسی ایا این راه صحیح است یا نه.......ایا بقیه برنامه نویس ها هم همینطوری کار می کنن یا نه؟؟

اگه راه درستی هست ک مشکلی نیست از همین راه استفاده میکنم ولی اگه راه درستی نیست، چ قسمت از کارم مشکل داره و چ راهی رو برام پیشنهاد می کنید؟؟؟

با تشکر از این ک وقت گزاشتین و این پست رو خوندین.
ممنون میشم ک راهنماییم کنین...

boomba
یک شنبه 22 شهریور 1394, 00:45 صبح
یک جدول گروه کاربری در نظر بگیرید با آیدی و نام و نقش ها
توی جدول کاربریتونم یک فیلد گروه کاربری بسازید و گروه کاربری کاربر رو توش قرار بدید
اینطوری میتونید گروه هایی از پیش بسازید و هنگام ساخت کاربر فقط گروه کاربری را انتخاب کنید
در جدول گروه کاربری هم میتونید همه نقش های منتخب را بصورت آرایه ذخیره کنید و پس از فعال شدن سشن مدیریت اونو اکسترکت کنید که جز کدوم گروه کاربری هست

boomba
یک شنبه 22 شهریور 1394, 00:48 صبح
function check_page_access($right){ $check = group_admin && in_array($right, explode(',', group_rights))? true : false; if (!$check && !group_super_admin){ return false; }elseif ($check || (!$check && group_super_admin)){ return true; } }

اینم تابع چک کردن که میتونید سفارشی کنید برای خودتون موفق باشید

hamedarian2009
یک شنبه 22 شهریور 1394, 07:55 صبح
بهتره اصولی کار کنید این مثال خوبی از کاری که می خواهید انجام بدین هست:
http://www.sitepoint.com/role-based-access-control-in-php/

asma69
سه شنبه 24 شهریور 1394, 12:56 عصر
بهتره اصولی کار کنید این مثال خوبی از کاری که می خواهید انجام بدین هست:
http://www.sitepoint.com/role-based-access-control-in-php/


ممنون از راهنماییتون

asma69
سه شنبه 24 شهریور 1394, 12:57 عصر
یک جدول گروه کاربری در نظر بگیرید با آیدی و نام و نقش ها
توی جدول کاربریتونم یک فیلد گروه کاربری بسازید و گروه کاربری کاربر رو توش قرار بدید
اینطوری میتونید گروه هایی از پیش بسازید و هنگام ساخت کاربر فقط گروه کاربری را انتخاب کنید
در جدول گروه کاربری هم میتونید همه نقش های منتخب را بصورت آرایه ذخیره کنید و پس از فعال شدن سشن مدیریت اونو اکسترکت کنید که جز کدوم گروه کاربری هست


سلام..خسته نباشین..ممنون از راهنمایییتون...
بحث گروه کاربری ک مطرح کردید مفید بود....مرسی..
اما میخواستم بدونم آیا این راهی ک من در پیش گرفتم و کار کردم آیا درسته یا نه....البته این سری میخوام طبق گفته شما گروه کاربری تعریف کنم و مدیر به هرگروه کاربری مجوزها رو نسبت بده......و بعد بگه که هر مدیری ک اضافه میشه عضو کدوم گروه کاربری هست....و متناسب با نظر خودش بتونه مجوزها رو برای هر مدیر کم و زیاد کنه.....
اما خب در این حالت هم باید هم مقدارهای مجوزها در دیتابیس ثبت شه و هم موقه نمایش چک بشه ک کدوم مجوز اجازه ی نمایش داره....
آیا این روشی که من کارکردم درسته یا نه؟؟
ممنون میشم بیشتر راهنماییم کنین...

asma69
پنج شنبه 02 مهر 1394, 13:07 عصر
سلام..خسته نباشین..ممنون از راهنمایییتون...
بحث گروه کاربری ک مطرح کردید مفید بود....مرسی..
اما میخواستم بدونم آیا این راهی ک من در پیش گرفتم و کار کردم آیا درسته یا نه....البته این سری میخوام طبق گفته شما گروه کاربری تعریف کنم و مدیر به هرگروه کاربری مجوزها رو نسبت بده......و بعد بگه که هر مدیری ک اضافه میشه عضو کدوم گروه کاربری هست....و متناسب با نظر خودش بتونه مجوزها رو برای هر مدیر کم و زیاد کنه.....
اما خب در این حالت هم باید هم مقدارهای مجوزها در دیتابیس ثبت شه و هم موقه نمایش چک بشه ک کدوم مجوز اجازه ی نمایش داره....
آیا این روشی که من کارکردم درسته یا نه؟؟
ممنون میشم بیشتر راهنماییم کنین...


کسی نمیتونه در این زمینه بیشتر راهنماییم کنه؟
ممنون میشم..