PDA

View Full Version : گفتگو: گفتگو در مورد نحوه ایجاد پنل کاربری !



siavashsay
شنبه 05 اسفند 1391, 11:29 صبح
دوستان قضیه اینکه نوار منوها ( Navigation Bar ) بالای سایتها بعد از لاگین کردن کاربران تغییر میکنه چی هست ؟!
یعنی کاربر توی همون صفحه هست - مثل همین برنامه نویس !
قبل لاگین منوها یه چیزی هست اما بعد از لاگین همون صفحه منوها فرق میکنن !
صفحه سایت تغییر نمیکنه اما منوها فرق میکنن !
چندتا چیز که به ذهن من رسید :
1- بعد از لاگین با چک کرد سشن لاگین کاربر منوها رو مقدار دهی میکنن
خوب توی این روش پس باید بگیم منوها هم دینامیک هستند ! اینطوری خیلی کدنویسی نمیشه ؟ یا بعدا بخواد به مشکل بخوره ؟!
2- 2 تا منو درست میکنن ! در حالت غیر لاگین توی Css یا Style اون منوی دوم ( لاگین ) مقدار display : none میذارن و بعد از لاگین با چک کردن وجود سشن کاربر همون مقدار رو برای منوی اول ( غیر لاگین ) میذارن !
===
میشه توجیهم کنید ؟!
ممنون میشم !

MRmoon
شنبه 05 اسفند 1391, 12:19 عصر
نگا با جاوا میشه اینسرت کنی! یا display رو تغییر بدی .

خوب الان سوالت چیه؟ کد نویسیش چطوریه منظورت دقیق چیه؟

colors
شنبه 05 اسفند 1391, 12:21 عصر
سلام

یه چیزی تو مایه هایه دومی

if(isset($user)){
?>
<ul>
<li><a href="#">کنترل پنل</a></li>
<li><a href="#">خروج</a></li>
</ul>
<?php
}
else{
?>
<ul>
<li><a href="#">ورود</a></li>
<li><a href="#">ثبت نام</a></li>
</ul>
<?php
}

جاوا و سی اس اس و اینا نمیشه. اصولی و جالب نیست

siavashsay
شنبه 05 اسفند 1391, 13:01 عصر
دومی تو نظرم هست !
مثلا این کد :

if(isset($_SESSION['username'])){
$showMenu1="display:none";
$showMenu2="";
}else{
$showMenu1="";
$showMenu2="display:none";
}


<div name="menu1" style="<?php echo $showMenu1;?>" >
<ul> <li> </li> </ul>
</div>

<div name="menu2" style="<?php echo $showMenu2;?>" >
<ul> <li> </li> </ul>
</div>

اگر لاگین باشه منوی 2 نشون داده میشه ! اگر نه منوی 1 !
درسته ؟

MRmoon
شنبه 05 اسفند 1391, 13:06 عصر
خوب اینجوری که یارو راحت استایلش رو با Inpect Element تغییر میده!

colors
شنبه 05 اسفند 1391, 13:46 عصر
تنها راه منطقی و درستش، همون کدی هست که گذاشتم.
بی خیال این display:none شو. همونطوری که MRmoon گفت میشه دستکاریش کرد. در ضمن وقتی چیزی لازم نیست چرا الکی لود بشه!!
اصلا همون کد خودت رو ببین، به جای اینکه متغییرهارو مقداری دهی کنی، منوهاتو چاپ کن.


if(isset($_SESSION['username'])){
?>
<div name="menu1" >
<ul> <li> </li> </ul>
</div>
<?php
}else{
?>
<div name="menu2" >
<ul> <li> </li> </ul>
</div>
<?php
}

eshpilen
شنبه 05 اسفند 1391, 14:05 عصر
خوب اینجوری که یارو راحت استایلش رو با Inpect Element تغییر میده!
خب تغییر بده. چی میشه مگه؟
همینطوریش هم هرکس میتونه در سمت کلاینت هرکدی رو که میخواد اضافه یا حذف کنه. حتما لازم نیست از قبل در سورس صفحه باشه.
اگر منظورتون برای امنیته، تامین امنیت از طریق کدهای سمت کلاینت اصولا وجود خارجی نداره.
البته منم لزوما با این راه موافق نیستم، چون صرفا یکسری کد بلااستفاده رو میفرسته به کلاینت، و مجبور هم نیست این کار رو بکنه.

Veteran
شنبه 05 اسفند 1391, 14:19 عصر
سلام.نه اخه میدونی.گاهی اوغات با دستکاری کردن کد های سمت کلاینت میشه یک قسمت هایی از سیستم رو دور زد.
من خودم به شخصه اینگونه موارد رو دیدم.

eshpilen
شنبه 05 اسفند 1391, 14:59 عصر
سلام.نه اخه میدونی.گاهی اوغات با دستکاری کردن کد های سمت کلاینت میشه یک قسمت هایی از سیستم رو دور زد.
من خودم به شخصه اینگونه موارد رو دیدم.
خب منم همینو میگم.
اون سیستمی که اینطوری باشه باگ و حفره داره. امنیتش احتمالا اصولی نبوده.
وگرنه بعضی وقتا و بعضی چیزا نیست. شانسی که نیست. حتما یک جایی ضعف و نقصی داره. منظورم سمت سروره! وگرنه سمت کلاینت که در کنترل نیست و تقریبا هرکاری میشه باهاش کرد.

Veteran
شنبه 05 اسفند 1391, 15:14 عصر
من سایت های معروفی رو دیدم که با تغیرات سمت کلاینت به مشکل برخورده.
باید حالت های مختلف رو دنظر گرفت.

eshpilen
شنبه 05 اسفند 1391, 15:57 عصر
از کلی گویی و مبهم گویی پرهیز کن.
سایتهای معروفی؟ خب مثلا؟ نمونه بده. دقیقا چطوری چه اتفاقی میفته؟
در نهایت هم دلیل نمیشه که. توی ویندوز و مشهورترین برنامه ها هم باگها و حفره های خفن پیدا شده و میشه.
باید حالتهای مختلف رو درنظر گرفت دقیقا یعنی چی اونوقت؟ :متفکر:

siavashsay
شنبه 05 اسفند 1391, 17:06 عصر
دوستان ممنونم از پاسخ هاتون اما قرار شد راهنمایی کنید نه اینکه مثال هایی رو از جاهای دیگه بیارید !

اصلا همون کد خودت رو ببین، به جای اینکه متغییرهارو مقداری دهی کنی، منوهاتو چاپ کن.
خوب الان مثلا اون کاری که شما گفتی با اینی که من گفتم چه فرقی میکنه ؟!
اینجا هم کار خاصی نمیشه - فقط اگر سشن کاربر موجود نبود یکی از منوها نشون داده نمیشه ! تازه اگرم نشون داده شه چی میشه ؟! نهایت یه سری لینک هست که کاربر در حالت لاگین میتونه به اونا بره !
این کار من و بقیه سایتها ( البته چیزی که من تو ذهنم هست ) فقط حالت فرمالیته داره که کاربر اگر لاگین نشده لینکها بهش نشون داده نشه اما اگر لاگین کرد لینکهای کاربری بهش نشون داده شه !
میخوام بدونم یعنی خیلی قراره فرق کنه که یه سری لینک که در حالت لاگین کاربران میتونن ببینن بهش نشون داده بشه ( البته اگر مثلا دستکاری کنن )

$ M 3 H R D A D $
شنبه 05 اسفند 1391, 17:24 عصر
من باشم اینجوری عمل میکنم :

1.نهایتا یک منو دارم
2.یک استایل خاص برای نمایش

منو ها و با دسته بندی ها مختلف در گروه و زیر گروه افزوده و برای هرکدومشون یک سطح نمایش قرار میدم ( مهمان - کاربر - مدیر )

استایل و type ها منو هم داینامیک میکنم یعنی تو قیمت مدیریت منو ها کاربر میتونه یک منو ساز جدید بسازه که این منو ساز یک کد داره
و بعدش روش که کلیک میکنه تو میریت میتونه اون منو و بهش آیتم اضافه کنه ( گروه زیرگروه سطح دید / استایل مخصوی / و یک سری تنظیمات )
و بعدش تو قالب مشخص می کنه که با یک تگ از پیش تعریف شده منو و نمایش بده


<:tag name="DisplayMenu" option="{style:blue,limit:3}" value="123" />

خوب موتور قالب میاد با دیدن این تگ موتور نمایش من و فراخونی میکنه
و با دادن کوئری های مختلف به بانک میاد میفهمه الان تو این قسمت از منو کدم منو باید با کدوم استایل و تنظیمات و کدوم آیتم ها ( با توه به اینکه بازدید کنده تو کدوم سط ( کاربر مدیر مهمان ) است ) نمایش بده

داینامیک و قابل تغییر

$ M 3 H R D A D $
شنبه 05 اسفند 1391, 17:27 عصر
دیدم بحث هست توضیح محدد میدم : if و else
اگر این در غیر اینصورت ( کلی بهش نگاه کنیم 2 تا شرطه این نشد اون ( جالا ایف های تو در تو هم باز نمیشه صحبتش کرد و من دیگه داینامیک نمیشه در اون صورت )
اینجوری میتونید از یک آیتم کوچیک در منو ( داخلی ترین زیر منو ) گرفته تا کلا خود یک نو و با سطح دسترسی های مختلف نمایش بدید ( دسترسی ها هم پیوسته هستند ( سطح دسترسی دارند ) یعنی مدیر همه امکانات نمایشی مدیریتی یک کاربر معمولی و داره )

siavashsay
شنبه 05 اسفند 1391, 17:35 عصر
اصلا یه سوال کلی میپرسم !
اصول طراحی کردن منو چیه ؟!
اگر کاربر لاگین کرده بود و نکرده بود چطوری اون منو رو نشون میدن ؟! همون طور که دوستمون جناب colors گفتن یعنی ؟!

$ M 3 H R D A D $
شنبه 05 اسفند 1391, 17:40 عصر
من توضیح دادم شهریار جان
شما الان تو این فکر هستی که ما چند منو ثابت داریم در نمایش نهایی یکی و نمایش و بقیه و "مخفی " میکنیم
اما من میگم :
ما نهایتا یک منو داریم که داده های اون داینامیک لود میشند تو شرایط مختلف !

siavashsay
شنبه 05 اسفند 1391, 17:43 عصر
پس همونی هست که دوستمون colors گفتن !
به هر حال تشکر میکنم از پیگیریتون ! لطفتون رو رسوندید ! :)

colors
شنبه 05 اسفند 1391, 17:43 عصر
دوستان ممنونم از پاسخ هاتون اما قرار شد راهنمایی کنید نه اینکه مثال هایی رو از جاهای دیگه بیارید !

خوب الان مثلا اون کاری که شما گفتی با اینی که من گفتم چه فرقی میکنه ؟!
اینجا هم کار خاصی نمیشه - فقط اگر سشن کاربر موجود نبود یکی از منوها نشون داده نمیشه ! تازه اگرم نشون داده شه چی میشه ؟! نهایت یه سری لینک هست که کاربر در حالت لاگین میتونه به اونا بره !
این کار من و بقیه سایتها ( البته چیزی که من تو ذهنم هست ) فقط حالت فرمالیته داره که کاربر اگر لاگین نشده لینکها بهش نشون داده نشه اما اگر لاگین کرد لینکهای کاربری بهش نشون داده شه !
میخوام بدونم یعنی خیلی قراره فرق کنه که یه سری لینک که در حالت لاگین کاربران میتونن ببینن بهش نشون داده بشه ( البته اگر مثلا دستکاری کنن )

متوجه نشدم، منظورت چیه؟

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

siavashsay
شنبه 05 اسفند 1391, 17:56 عصر
منظورم خیلی ساده هست !
من الان یک منوی ساده ساختم تا منظورم رو راحت برسونم ! لطفا دوستان فقط اجرا کنن ببینن قضیه !
فقط بجای اینکه سشن تنظیم کنم از متغیر GET استفاده کردم ! یعنی 2 بار صفحه رو اجرا کنید :
1- page.php?id=0
2- page.php?id=1
اگر 0 باشه یعنی کاربر لاگین نکرده و منوی معمولی نشون داده میشه و اگر 1 باشه منوی پنل کاربری نشون داده میشه !
ممنون میشم نظراتتون رو بدید :) منتظرم

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style>

#nav
{
padding:0;
}

#nav li
{
display:inline;
}

#nav li a
{
font-family:Arial;
font-size:12px;
text-decoration: none;
float:left;
padding:10px;
background-color: #333333;
color:#ffffff;
border-bottom:1px;
border-bottom-color:#000000;
border-bottom-style:solid;
}

#nav li a:hover
{
background-color:#9B1C26;
padding-bottom:12px;
border-bottom:2px;
border-bottom-color:#000000;
border-bottom-style:solid;
margin:-1px;
}

</style>
</head>

<body>
<?php
// user not login
if($_GET['id']==0){
$show1="";
$show2="display:none";
}
// user logged in
else{
$show1="display:none";
$show2="";
}
?>
<ul id="nav" style="<?php echo $show1;?>">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Products</a></li>
<li><a href="#">Sitemap</a></li>
<li><a href="#">Help</a></li>
<li><a href="#">Login</a></li>
</ul>

<ul id="nav" style="<?php echo $show2;?>">
<li><a href="#">User Home</a></li>
<li><a href="#">Profile</a></li>
<li><a href="#">Account</a></li>
<li><a href="#">Send</a></li>
<li><a href="#">Mail</a></li>
<li><a href="#">Users</a></li>
<li><a href="#">Logout</a></li>
</ul>

</div>
</body>
</html>

colors
شنبه 05 اسفند 1391, 18:05 عصر
برادر من چرا اصرار داری از display:none استفاده کنی که کار الکی و بیخودیه. :عصبانی:

اینجوریش کن:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style>
#nav { padding: 0; }
#nav li { display: inline; }
#nav li a { font-family: Arial; font-size: 12px; text-decoration: none; float: left; padding: 10px; background-color: #333333; color: #ffffff; border-bottom: 1px; border-bottom-color: #000000; border-bottom-style: solid; }
#nav li a:hover { background-color: #9B1C26; padding-bottom: 12px; border-bottom: 2px; border-bottom-color: #000000; border-bottom-style: solid; margin: -1px; }
</style>
</head>

<body>
<?php
// user not login
if($_GET['id']==0){
?>
<ul id="nav">
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">About</a>
</li>
<li>
<a href="#">Services</a>
</li>
<li>
<a href="#">Products</a>
</li>
<li>
<a href="#">Sitemap</a>
</li>
<li>
<a href="#">Help</a>
</li>
<li>
<a href="#">Login</a>
</li>
</ul>
<?php
}
// user logged in
else{
?>
<ul id="nav">
<li>
<a href="#">User Home</a>
</li>
<li>
<a href="#">Profile</a>
</li>
<li>
<a href="#">Account</a>
</li>
<li>
<a href="#">Send</a>
</li>
<li>
<a href="#">Mail</a>
</li>
<li>
<a href="#">Users</a>
</li>
<li>
<a href="#">Logout</a>
</li>
</ul>
<?php
}
?>
</div>
</body>
</html>

siavashsay
شنبه 05 اسفند 1391, 18:40 عصر
برادر من چرا اصرار داری از display:none استفاده کنی که کار الکی و بیخودیه. :عصبانی:
:قهقهه: داداش ناراحتت کردما !
اصلا ما میگیم گفته شما درست ! فقط توجیه میخوام بشم که چرا display:none مشکل زا میشه !
یه بحثی هست به نام خلاقیت ! من نمگیم خلاقیت به خرج دادم - اما گمونم موردی رو عنوان کردم که شاید خیلی ها تا حالا امتحان نکرده بودن !
حالا بحث توجیهی هست ! میخوام ببنیم مشکلات این قضیه چی هست !
همین !
بازم مرسی

colors
شنبه 05 اسفند 1391, 19:02 عصر
آره دیگه

اول : وقتی از این روش(display) استفاده میکنید، منوهای بی مصرفی رو لود میکنید. یعنی چه کاربر باشه چه مهمان در هر صورت یه سری کد اضافه و الکی لود میشه!
دوم : کاربر میتونه با دستکاری (مثلا firebug) دوتا منو رو نماش بده که در این صورت اگه مهمان باشه میتونه لینکهای منوی کاربران ثبت نام شده رو ببینه، و حتی از نظر امنیت میتونه مشکلزا باشه.
سوم : یکی از دو مورد بالا

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

siavashsay
شنبه 05 اسفند 1391, 19:16 عصر
اول : وقتی از این روش(display) استفاده میکنید، منوهای بی مصرفی رو لود میکنید. یعنی چه کاربر باشه چه مهمان در هر صورت یه سری کد اضافه و الکی لود میشه!
قبول دارم !

دوم : کاربر میتونه با دستکاری (مثلا firebug) دوتا منو رو نماش بده که در این صورت اگه مهمان باشه میتونه لینکهای منوی کاربران ثبت نام شده رو ببینه، و حتی از نظر امنیت میتونه مشکلزا باشه.
قبول ندارم ! چون اگر بازدیدکننده یک هکر باشه میتونه بره ثبت نام کنه و باز هم لینکها رو ببینه ! پس فرقی نمیکنه !
اما خوب در هر صورت من هم از همون روش شما استفاده میکنم - این بحث هم صرف جنبه توجیهی داشت!
به هر حال ممنونم از سعی صدر داشتی و جواب دادی :)
انشالله به مشکل بخوری کمکت کنیم :قهقهه:

$ M 3 H R D A D $
شنبه 05 اسفند 1391, 19:26 عصر
با add one ادیت css و کلی روش دیگه میشه استایل و دور زد و به لینک هایی رفت که نباید رفت پس همونی که گفتم و پیگیری کنید ممکنه یک سری لینک ها و کاربر حفط کنه پس تو صفه هاتون هم باید چک کنید کاربر تو چه سطحی قرار داره

colors
شنبه 05 اسفند 1391, 19:51 عصر
قبول ندارم ! چون اگر بازدیدکننده یک هکر باشه میتونه بره ثبت نام کنه و باز هم لینکها رو ببینه ! پس فرقی نمیکنه !
حداقلش اینه که یه دقیقه از وقت هکر رو تلف میکنی و مفتی بهش هیچی نمیدی!


انشالله به مشکل بخوری کمکت کنیم :قهقهه:
:لبخند:

Veteran
شنبه 05 اسفند 1391, 21:00 عصر
لینکهای منوی کاربران ثبت نام شده رو ببینه، و حتی از نظر امنیت میتونه مشکلزا باشه.
خوب ببینه ! مگه چی میشه ! میتونیم از ورود افراد لاگین نکرده به اون صفحاتی ک باید لاگین شده باشه جلوگیری بکنیم !

Yuness Mehdian
شنبه 05 اسفند 1391, 21:10 عصر
دوست عزیز بهتره که منو رو تولید کنید ، در این صورت نیاز به مخفی کردن قسمتهای دیگه ندارید، البته در نهایت خروجی کار با روش خودتون یکی هست و در هر حال باید سمت سرور از معتبر بودن ورود کاربر مطمئن شد با session ها، ولی بعضی وقتها هست که شما انواع مختلفی از کاربرا رو داری و بالطبع برای هر کدوم هم دوس داری یه منو نشون بدی خوب بهتره یک تابع یا کلاس بنویسی واسه منو و اون تابع یا کلاس چک کنه که کاربری که لاگین شده کی هست و باید چه منویی رو ببینه و خودش تولیدش کنه ، اگه بخوای همه ی منو های ممکن رو بفرستی و همه رو به جز یکی مخفی کنی کار عاقلانه ای نیست مخصوصا اگه بخوای منوی جدید رو با ajax بگیری خوب سرعتش کمتر میشه دیگه . راستی در مورد امنیت با دوستان موافقم باید سمت سرور چک کنی و از اینکه هکر ها لینک ها رو ببینن نباید ترسید باید پشت صحنه رو قوی کرد!

eshpilen
شنبه 05 اسفند 1391, 21:32 عصر
حداقلش اینه که یه دقیقه از وقت هکر رو تلف میکنی و مفتی بهش هیچی نمیدی!
:لبخند:
به این مورد خاص که در این تاپیک بحثش شد کاری ندارم، ولی در کل باید به اینم توجه داشت که چقدر از وقت و انرژی ارزشمند خودمون هم تلف میشه.
یکسری روشهایی هست که بنظر بنده صرف نداره. مثلا طرف میاد کلی میپیچونه و مثلا پاسخ های جعلی و نمیدونم 404 های جعلی و اینا درست میکنه و خیلی بنده و بساط دیگه توی همین مایه ها، که بیاد هکرها رو گمراه کنه.
خب البته این میتونه درصدی به امنیت اضافه کنه، ولی درمقابل هزینه هم داره؛ هزینش هم اینکه فکر خودمون مغشوش میشه، وقت و انرژیمون میره سر چندتا ترفند سطح پایین که نمیتونه جلوی هکرهای باسواد و مصمم رو بگیره و حتی درمورد هکرهای ناشی تر و جوجه هکرها هم نمیشه تضمین یا برآورد بقدر کافی مطمئنی داشت که چقدر موثره، چون کلا جعل کردن بی نقص یکی از غیراستانداردترین و بی قاعده ترین و سخت ترین کارهاست و معمولا ده ها راه و نشانه و حتی موارد تصادفی وجود دارن که میتونن جعلی بودن یه چیزی رو آشکار کنن.
تازه با این کارها اغلب تست و دیباگ برنامه برای خودمون هم میتونه سخت تر و کندتر بشه و ضریب خطاهای انسانی برنامه نویس هم بالاتر بره که این حتی برای همون امنیتی هم که بخاطرش این کارها رو میکنیم خطر داره.

آیا بجای استفاده از این ترفندهای سطحی بهتر نیست وقت و انرژی خودمون رو روی مسائل دیگر منجمله کاملتر و قوی تر کردن امنیت از نوع اصولی و سمت سرور صرف بکنیم؟
امنیت کامل و اصولی هم که خودش بقدر کافی گسترده و دشوار هست که فکر میکنم وقتی برای پرداختن به اون روشهای سطحی نمیذاره.
اونایی که از اون روشهای سطحی استفاده میکنن بنده فکر میکنم بیشتر بخاطر اینه که امنیت از نوع حرفه ای و کامل برنامه هاشون نداره. حالا یا بلد نیستن/براشون بیش از حد سخته یا به هر دلیل دیگری امنیت اصولی و کاملی رو کار نمیکنن. طبیعتا این افراد اولا وقت و انرژی بیشتری دارن که روی این روشهای سطح دوم صرف کنن و ضمنا با این کار سعی میکنن تاحد ممکن امنیت حداقلی رو با همین روشها بدست بیارن یا درواقع ماست مالی کنن. یعنی واسه اونا صرف میکنه، ولی کسی که میدونه امنیت واقعی و کامل چیه و چقدر دشوار و پیچیده هست میدونه که این روشها اونقدرها هم ارزش و کارایی ندارن که بخواد از چیزهای دیگه بزنه بخاطر اونا، علی الخصوص که میتونه بجاش روی روشهای اصولی تر و تست و بررسی حرفه ای در زمینهء امنیت برنامش تمرکز کنه.

rezabojnordi
شنبه 25 خرداد 1392, 11:42 صبح
سلام دوستان کسی نمونه منو داینامیک با زبان php داره به من بده اگه امکانش هست برام میل کنید مرسی bojnordireza@yahoo.com