PDA

View Full Version : سطح دسترسی کارابران



rash44
دوشنبه 28 بهمن 1387, 15:05 عصر
سلام
دوستان فرض کنید 4 تا کاربر به عنوان مدیر وب سایت داریم
من می خوام هریک از کاربران فقط به یکی سری از فسمت های صفحه مدیریت دسترسی داشته باشند .
می دونم که واسه اینکار باید از سطح دسترسی استفاده کنم
لطفا در مورد این کار توضیح بدین و اگه 1 مثال برنید ممنون میشم .
این سایت رو میخوام هم روی اینترنت و و هم روی لوکال هاست قرار بدم .
در ضمن من تازه کار هستم

yaqubian
دوشنبه 28 بهمن 1387, 17:27 عصر
دوست عزیز
شما باید یه جدول تشکیل بدین و قسمت هایی رو که اعضا می خوان به اونا دسترسی داشته باشن معرفی کنین و بعد می تونید با دادن مقادیر 0 و 1 سطح دسترسی رو چک کنین. اگه 0 باشه یعنی دسترسی نداره و اگه 1 یعنی مجوز استفاده رو داره!
موفق باشید

smhnaji
دوشنبه 28 بهمن 1387, 23:09 عصر
دوست عزیز
شما باید یه جدول تشکیل بدین و قسمت هایی رو که اعضا می خوان به اونا دسترسی داشته باشن معرفی کنین و بعد می تونید با دادن مقادیر 0 و 1 سطح دسترسی رو چک کنین. اگه 0 باشه یعنی دسترسی نداره و اگه 1 یعنی مجوز استفاده رو داره!
موفق باشید
با عرض سلام و احترام خدمت جناب آقا/خانم یعقوبیان:لبخندساده:
در این مورد که دوستمون پرسیدن، من هم مشکل دارم.

می‌دونید چیه؟ تو این روشی که گفته شد، ما باید همیشه حواسمون باشه هر وقت امکان جدیدی به سایت اضافه می‌شه، به اون جدول هم یه فیلد اضافه کنیم...

ببینم، شما روش بهینه رو همین روش می‌دونید؟ خودتون از همین روش استفاده کردید؟

من خودم یه مدت درگیر این موضوع بودم، و یادمه که Wordpress رو که دیدم، متوجه شدم که برای هر Usergroup (یا کاربری) یه فیلد Permissions (یا یه چیزی با همین مضمون) داره که یه رشته‌ای شبیه regualr expression بود.

نکته‌ی جالب این که من (فکر می‌کنم) MyBBoard رو هم که دیدم، از همین روش استفاده کرده بود.

فقط یه سیستم دیگه بود که از یه روش دیگه استفاده کرده بود که الان یادم نیست!

به هر حال من فکر می‌کنم بحث در این مورد جالب باشه. نمی‌دونم نظر شما چیه؟

ممنون

as13851365
سه شنبه 29 بهمن 1387, 08:54 صبح
به نظر من این قسمت سلیقه ای هم می تونه باشه

مثلا شما در جدول کاربرانتان یک فیلد از نوع اعداد داشته باشید که محدوده 10 را برایش در نظر بگیرید :
1 ) کاربران می تونید فقط مطلب جدید ایجاد کنند
2 ) کاربران می تونند متن جدید اضافه کرده و آن را ویرایش کنند
3 ) کاربران می تونند متن جدید اضافه کرده آن را ویرایش و یا حذف کنند
4 ) کاربران می تونند قسمت نظر سنجی سایت را مشاهده کنند
5 ) کاربران می تونند نظرات سایت را مدیریت کنند ( حذف ویرایش و...)
6 ) کاربران می تونند به قسمت تنظیمات سایت مراجعه کنند
.
.
.
.

این یک مثال بود ولی من تا حالا از تعیین سطح استفاده نکردم و این روش به ذهن من می رسه اگه دوستان دیگه روشهای دیگه ای دارند و می دونند اگه معرفی کنند خیلی خوب می شه ما هم استفاده می کنیم

rash44
سه شنبه 29 بهمن 1387, 14:49 عصر
به نظر من این قسمت سلیقه ای هم می تونه باشه

مثلا شما در جدول کاربرانتان یک فیلد از نوع اعداد داشته باشید که محدوده 10 را برایش در نظر بگیرید :
1 ) کاربران می تونید فقط مطلب جدید ایجاد کنند
2 ) کاربران می تونند متن جدید اضافه کرده و آن را ویرایش کنند
3 ) کاربران می تونند متن جدید اضافه کرده آن را ویرایش و یا حذف کنند
4 ) کاربران می تونند قسمت نظر سنجی سایت را مشاهده کنند
5 ) کاربران می تونند نظرات سایت را مدیریت کنند ( حذف ویرایش و...)
6 ) کاربران می تونند به قسمت تنظیمات سایت مراجعه کنند
.
.
.
.

این یک مثال بود ولی من تا حالا از تعیین سطح استفاده نکردم و این روش به ذهن من می رسه اگه دوستان دیگه روشهای دیگه ای دارند و می دونند اگه معرفی کنند خیلی خوب می شه ما هم استفاده می کنیم

سلام دوستان
مثلا ما همین کار رو انجام دادیم و به هر کاربر هم 1 سطح دسترسی اختصاص دادیم
حالا چطور و از طریقی باید سطح دسترسی کار رو چک کمیو و به اون اجازه 1 کار خاص رو بدیم ؟؟؟

smhnaji
چهارشنبه 30 بهمن 1387, 00:53 صبح
برای این‌که بتونیم هرکدوم از این سطح دسترسی‌ها رو به هر طریقی که می‌خوایم داشته باشیم، باید برای هر امکان، یه عدد درنظر بگیریم. با یه مثال راحت می‌شه گفت و متوجه شد!

فرض کنیم می‌خوایم اجازه‌ی کارهای A تا F رو به بعضی از کاربرها بدیم/ندیم.

اول می‌آیم برای هر کاری، یه عدد درنظر می‌گیریم:

Number of (A) = 2^0 = 1
Number of (B) = 2^1 = 2
Number of (C) = 2^2 = 4
Number of (D) = 2^3 = 8
Number of (E) = 2^4 = 16
Number of (F) = 2^5 = 32

حالا اگه بخوایم بگیم یه کاربری می‌تونه کار A و C و D رو انجام بده (و بقیه رو نتونه انجام بده)، عدد ِ اون کاربر می‌شه:
Permissions of User1 = 1 + 4 + 8 = 13

حالا هروقت ببینیم کسی عدد ِ دسترسی‌ش ۱۳ هست، می‌فهمیم که اجازه‌ی A و C و D رو داره اما اجازه‌ی بقیه نداره.

persian_farvahar
چهارشنبه 30 بهمن 1387, 10:06 صبح
برای این‌که بتونیم هرکدوم از این سطح دسترسی‌ها رو به هر طریقی که می‌خوایم داشته باشیم، باید برای هر امکان، یه عدد درنظر بگیریم. با یه مثال راحت می‌شه گفت و متوجه شد!

فرض کنیم می‌خوایم اجازه‌ی کارهای A تا F رو به بعضی از کاربرها بدیم/ندیم.

اول می‌آیم برای هر کاری، یه عدد درنظر می‌گیریم:

Number of (A) = 2^0 = 1
Number of (B) = 2^1 = 2
Number of (C) = 2^2 = 4
Number of (D) = 2^3 = 8
Number of (E) = 2^4 = 16
Number of (F) = 2^5 = 32

حالا اگه بخوایم بگیم یه کاربری می‌تونه کار A و C و D رو انجام بده (و بقیه رو نتونه انجام بده)، عدد ِ اون کاربر می‌شه:
Permissions of User1 = 1 + 4 + 8 = 13

حالا هروقت ببینیم کسی عدد ِ دسترسی‌ش ۱۳ هست، می‌فهمیم که اجازه‌ی A و C و D رو داره اما اجازه‌ی بقیه نداره.
فکر نمیکنم راه حل مناسبی باشه چون 5+8=13 و یا 9+4 هم میشه 13

smhnaji
چهارشنبه 30 بهمن 1387, 10:31 صبح
فکر نمیکنم راه حل مناسبی باشه چون 5+8=13 و یا 9+4 هم میشه 13
هیچ عدد 9 ای وجود نخواهد داشت.
عدد ها همه (2 به توان n) هستن.

دوست خوبم، نمی دونم تا حالا هاست لینوکسی داشتی یا نه، اما سیستم عامل لینوکس برای اینکه روی فایل ها سطح دسترسی بذاره، از همین سیستم استفاده می کنه.
که مثلا تو می تونی پرمیشن یک سری فایل رو 777 کنی، یا 755 یا 644، هرکدوم از این عددها بر اساس روشی که در بالا گفتم به دست میان.

numberone1
چهارشنبه 30 بهمن 1387, 11:33 صبح
هیچ عدد 9 ای وجود نخواهد داشت.
عدد ها همه (2 به توان n) هستن.

دوست خوبم، نمی دونم تا حالا هاست لینوکسی داشتی یا نه، اما سیستم عامل لینوکس برای اینکه روی فایل ها سطح دسترسی بذاره، از همین سیستم استفاده می کنه.
که مثلا تو می تونی پرمیشن یک سری فایل رو 777 کنی، یا 755 یا 644، هرکدوم از این عددها بر اساس روشی که در بالا گفتم به دست میان.

من فكر نميكنم اين روش جالبي باشه اگر سيستم براي كاربران 50 نوع حالت دسترسي داشته باشه 50*50=2500 حالت دسترسي اگر تو كمترين حالت هر دسترسي 2 خط كد داشته باشه ميشه 5000 خط برنامه !!!!!!!!تو سيستم هاي مالي اداري اين تعداد دسترسي وجود داره عدد پرت ندادممن فكر ميكنم همون روش آقاي يعقوبيان بهتره .

smhnaji
پنج شنبه 01 اسفند 1387, 00:01 صبح
من فكر نميكنم اين روش جالبي باشه اگر سيستم براي كاربران 50 نوع حالت دسترسي داشته باشه 50*50=2500 حالت دسترسي اگر تو كمترين حالت هر دسترسي 2 خط كد داشته باشه ميشه 5000 خط برنامه !!!!!!!!تو سيستم هاي مالي اداري اين تعداد دسترسي وجود داره عدد پرت ندادممن فكر ميكنم همون روش آقاي يعقوبيان بهتره .
توی هر دو روش 50^2 = 2500 حالت مختلف بوجود می‌آد.
فرقی که نمی‌کنه.
تو اونجا هم برای هر Usergroup ای ۵۰ تا فیلد برای مشخص کردن چگونگی دسترسی اون گروه کاربری درنظر گرفته می‌شه.

as13851365
پنج شنبه 01 اسفند 1387, 08:02 صبح
دوستان دیگه درباره تعیین سطح نظری ندارن ؟

مثلا چند مدل تعیین سطح وجود داره ؟
بهترینشون کدام هستش ؟

( هر چند این کار بیشتر می تونه سلیقه ای باشه ولی اگر دوستان دیگه نظری در این مورد بدن خیلی خوب می شه )

numberone1
پنج شنبه 01 اسفند 1387, 15:48 عصر
توی هر دو روش 50^2 = 2500 حالت مختلف بوجود می‌آد.
فرقی که نمی‌کنه.
تو اونجا هم برای هر Usergroup ای ۵۰ تا فیلد برای مشخص کردن چگونگی دسترسی اون گروه کاربری درنظر گرفته می‌شه.

اين درسته كه تو هر 2 حالت 2500 نوع دسترسي بوجود ميان
منظور من اين بود كه اجراي 5000 خط كد php و لود شدنش تبديل به فاجعه ميشه تازه اگه كد هاي برنامه رو اصلا حساب نكنيم
اگر ما 50 تا كاربر تو ديتابيس تعريف كنيم اونوقت جلوي هر كاربر رو با 0 و 1 ستون مربوط به هر نوع دسترسي رو علامت گذاري كنيم .اينجوري حجم ديتابيس زياد ميشه نه حجم كد php
بعد ميشه با چند خط كد ساده چك كنيم كه هر كاربر چقدر سطح دسترسي داره .
اينجوري سرعت اجراي برنامه بالاتر ميره . براي مصرف كننده كه نميدونه چه خبره اين خيلي مهمه
البته فكر كنم راه هاي ديگه اي هم باشه . :لبخندساده:

smhnaji
جمعه 02 اسفند 1387, 10:34 صبح
اين درسته كه تو هر 2 حالت 2500 نوع دسترسي بوجود ميان
منظور من اين بود كه اجراي 5000 خط كد php و لود شدنش تبديل به فاجعه ميشه تازه اگه كد هاي برنامه رو اصلا حساب نكنيم
اگر ما 50 تا كاربر تو ديتابيس تعريف كنيم اونوقت جلوي هر كاربر رو با 0 و 1 ستون مربوط به هر نوع دسترسي رو علامت گذاري كنيم .اينجوري حجم ديتابيس زياد ميشه نه حجم كد php
بعد ميشه با چند خط كد ساده چك كنيم كه هر كاربر چقدر سطح دسترسي داره .
اينجوري سرعت اجراي برنامه بالاتر ميره . براي مصرف كننده كه نميدونه چه خبره اين خيلي مهمه
البته فكر كنم راه هاي ديگه اي هم باشه . :لبخندساده:
من متوجه منظور شما نمی‌شم.

ببینم، این ۲ روش چه تفاوتی با هم دارن؟

آرایه‌ی روبرو رو درنظر بگیر:

$user->permission = array(
"back_end" => NULL,
"back_end_moderate_comments" => NULL,
"front_end_post" => NULL
/*
other permissions...
*/
);این آرایه‌ای هست که پرمیشن‌های کاربر توش قرار می‌گیره.

این ۲ روش، فقط این قسمتشون فرق می‌کنه که:



در روش دیتابیسی کوئری یی رو اجرا کنیم و بعد از fetch کردن، آرایه‌ی روبرو رو fill می‌کنیم.
در روش عددی، با یه تابع که عدد رو به‌عنوان ورودی می‌گیره، آرایه رو بیل می‌کنیم.


بقیه‌ی قسمت‌ها هیچ فرقی با هم نمی‌کنن. یعنی من که فرقشونو متوجه نمی‌شم.

حالا اگه بخوایم برتری یه کدوم از روش‌ها رو بگیم، باید سر اون اختلاف بحث کنیم.

numberone1
شنبه 03 اسفند 1387, 10:34 صبح
:گیج:
من متوجه منظور شما نمی‌شم.

ببینم، این ۲ روش چه تفاوتی با هم دارن؟

آرایه‌ی روبرو رو درنظر بگیر:

$user->permission = array(
"back_end" => NULL,
"back_end_moderate_comments" => NULL,
"front_end_post" => NULL
/*
other permissions...
*/
);این آرایه‌ای هست که پرمیشن‌های کاربر توش قرار می‌گیره.

این ۲ روش، فقط این قسمتشون فرق می‌کنه که:



در روش دیتابیسی کوئری یی رو اجرا کنیم و بعد از fetch کردن، آرایه‌ی روبرو رو fill می‌کنیم.
در روش عددی، با یه تابع که عدد رو به‌عنوان ورودی می‌گیره، آرایه رو بیل می‌کنیم.

بقیه‌ی قسمت‌ها هیچ فرقی با هم نمی‌کنن. یعنی من که فرقشونو متوجه نمی‌شم.

حالا اگه بخوایم برتری یه کدوم از روش‌ها رو بگیم، باید سر اون اختلاف بحث کنیم.

حتما من بد توضیح میدم :لبخند:

<form method="post">
username: <input type="text" name="user" />
access: <input type="text" name="access" />
permission: <input type="text" name="permission" />
<input type="submit" />
</form>
mysql_query("INSERT INTO Persons (username, someaccess, permission)
VALUES ('$_post[user]', '$_post[access]', '$_post[permission]')");

$result = mysql_query("SELECT * FROM Persons
WHERE username='$_post[user]'");
while($row = mysql_fetch_array($result))
{
if 1 == $row['permission']
{
echo "the user " $row['user'] . " " . $row['access']. " " can access ..." ;
echo "<br />";
}
else {
echo "the user " $row['user'] . " " . $row['access']. " " cannot access ..." ;
}
}

میدونم خیلی کد هام نا خواناست ولی سادست امیدوارم منظورم و برسونه

smhnaji
شنبه 03 اسفند 1387, 23:01 عصر
شما در مورد نحوه‌ی فهمیدن پرمیشن‌های کاربر (یا یوزرگروپ) صحبت کردید.
همون‌طوری که گفتم، فهمیدن پرمیشن‌های کاربر، کار ساده‌ایه.
چه در حالتی که اطلاعات تو ۵۰ تا فیلد یه تیبل باشه، چه در صورتی که برای مشخص کردن پرمیشن‌ها از یه عدد استفاده کنیم و با یه تابع، اون عدد رو بگیریم و با روشی که گفتم یه آرایه رو مقدار دهی کنیم.

numberone1
یک شنبه 04 اسفند 1387, 12:34 عصر
شما در مورد نحوه‌ی فهمیدن پرمیشن‌های کاربر (یا یوزرگروپ) صحبت کردید.
همون‌طوری که گفتم، فهمیدن پرمیشن‌های کاربر، کار ساده‌ایه.
چه در حالتی که اطلاعات تو ۵۰ تا فیلد یه تیبل باشه، چه در صورتی که برای مشخص کردن پرمیشن‌ها از یه عدد استفاده کنیم و با یه تابع، اون عدد رو بگیریم و با روشی که گفتم یه آرایه رو مقدار دهی کنیم.
:عصبانی++::عصبانی++::عصبانی++:: صبانی++::ناراحت::افسرده:
الان فهميدم كه شما اصلا حتي يه لحظه هم به كد هاي من نگاه نكردين
ديگه بيشتر از اين نمي تونم توضيح بدم
اميدوارم موفق باشين:لبخندساده::چشمک:

smhnaji
یک شنبه 04 اسفند 1387, 13:15 عصر
دوست خوبم مشکلی که وجود نداشت که بخواد الان حل شه یا نا مفهموم باشه!
شما پرمیشن های کاربر رو echo کردی (یعنی هرکدوم رو به صورت جدا تو یه فیلد table در نظر گرفتی) :)

smhnaji
پنج شنبه 08 اسفند 1387, 00:12 صبح
می‌دونید دوستان؟

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

به نظر شما به تعداد امکاناتی که اون پلاگین جدید اضافه می‌کنه باید به table پرمیشن‌ها record جدید اضافه کرد؟به عبارت دیگه با هر بار تغییر تو پلاگین‌ها باید table رو alter کرد؟ من فکر می‌کنم این کار stability سیستم رو میاره پایین.

(مطمئنا داریم درباره‌ی حالتی صحبت می‌کنیم که پلاگین می‌خواد انقدر قدرتمند باشه که خودشو با user group های سیستم هماهنگ کنه، نه این که بیاد برای خودش یه سری یوزرگروپ ناهماهنگ با سیستم بوجود بیاره)

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