PDA

View Full Version : سوال: هر کاربر فقط بتونه اطلاعاتی که خودش ثبت کرده رو ویرایش کنه



yekta99
شنبه 16 دی 1391, 16:59 عصر
سلام

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

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

فرض کنید مثل همین سایت که هرکاربر فقط میتونه پستهای خودش رو ویرایش کنه

چجوری باید این کار رو انجام بدم ؟؟؟؟؟

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

fakhravari
شنبه 16 دی 1391, 17:31 عصر
در پیج لود سطح دسترسی چک کنید و مقادیر و پنل هارا visible تغیر دهید.

yekta99
شنبه 16 دی 1391, 17:45 عصر
ممنون دوست عزیز
توی پیج لود کاربر رو چک می کنم ولی نمیدونم چجوری فقط اطلاعات اون فرد لاگین کرده امکان ویرایش داشته باشه

اطلاعات همه شعبه ها رو با repeater نمایش میدم ،نمیدونم چجوری باتن (پنل) مربوط به اون فیلد کاربر لاگین کرده رو دسترسی بهش داشته باشم که بتونم visible کنم ؟؟

fakhravari
شنبه 16 دی 1391, 17:49 عصر
خب نام کاربر داشته باشید همه چیز حل.
در زمان ورودی باید در یک سشن بریزید.

mortezasar
شنبه 16 دی 1391, 18:04 عصر
سلام دوست عزیز شما می تونید در جدولی که اطلاعاتت رو ثبت میکنی یک فیلد بذاری که کد اون آموزشگاه رو که اطلاعات رو ثبت کرده ذخیره کنه زمانیکه لاگین میشه مشخصه که از کذوم آموزشگاه هست و شما اطلاعات همون آموزشگاه ها رو از جدولت انتخاب میکتی

yekta99
شنبه 16 دی 1391, 18:18 عصر
خوب تا اینجا

var AuthenticatedUserName = HttpContext.Current.User.Identity.Name;

Session["userName"] = AuthenticatedUserName;

if (Session["userName"] != null)
{
}

و اگر این هم خوندن از repeater مون باشه :

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{

foreach (RepeaterItem item in Repeater1.Items)
{
Panel panel = (Panel)item.FindControl("Panel1");

HiddenField idd = (HiddenField)item.FindControl("HiddenField1");

int insId = int.Parse(idd.Value);
Institute instatue= InstituteManager.GetAllInstitutes ().Single(p => p.Id == insId);

// ???
}
}

بقیش رو نمیدونم ، ممنون میشم راهنمایی کنید

yekta99
شنبه 16 دی 1391, 18:27 عصر
سلام دوست عزیز شما می تونید در جدولی که اطلاعاتت رو ثبت میکنی یک فیلد بذاری که کد اون آموزشگاه رو که اطلاعات رو ثبت کرده ذخیره کنه زمانیکه لاگین میشه مشخصه که از کذوم آموزشگاه هست و شما اطلاعات همون آموزشگاه ها رو از جدولت انتخاب میکتی

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

اوبالیت به بو
شنبه 16 دی 1391, 23:23 عصر
درود بر شما

دکمه ویرایش رو درون TemplateField گرید قرار بدید و در قسمت DataBinding دکمه مورد نظر قسمت Visible رو اینطور مقدار بدید:



CheckEnableStatus((int)Eval("Manager_ID"));


که داخل Eval مقدار کد مدیر آموزشگاه مورد نظر رو بنویسید که من اسم فیلد رو Manager_ID گذاشتم.

حال در Code Behind صفحه این تابع رو بنویسید:




public bool CheckEnableStatus(int Manager_ID){
bool Status = false;
if(Manager_ID == WhoIsLogin)
Status = true;
else
Status = false;
return Status;
}

درون تابع بخش if قسمت WhoIsLogin رو باید مقدار کد شخص لاگین کرده (از جدول کاربران یا آموزشگاه ها) رو قرار بدید.

yekta99
شنبه 16 دی 1391, 23:58 عصر
ممنون از شما
ولی من متوجه نشدم ،توی repeater ، ف templateField نبود ، من برای انکه بتونم به صفحه مورد نظرم لینک داشته باشم به جای باتن از لینک (<a>) استفاده کردم وبرای اینکه بتونم به visible اون دسترسی داشته باشم گذاشتمش داخل پنل (راه دیگه به نظرم نرسید)

<asp:Panel ID="Panel1" runat="server" Visible="false" > <a id="lnkAddClass" href='ManageClass.aspx?ID=<%#Eval("Id")%>'>Add Class</a></asp:Panel>
نمیدونم کد شما رو چجوری باید استفاده کنم

اوبالیت به بو
یک شنبه 17 دی 1391, 17:54 عصر
اگر با گرید کار کنید راحت تر هست.

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

yekta99
یک شنبه 17 دی 1391, 21:30 عصر
با گریدویو هم نتونستم .
کسی راه دیگه به نظرش نمیرسه ؟

با session چجوریه ؟ تا حالا با session کار نکردم

rana-writes
یک شنبه 17 دی 1391, 23:45 عصر
اگر دارين با گريد نمايش ميدين كارتون راحت تره
توي گريد TemplateField بذارين كه توش يه ليبل باشه كه نام كاربري مدير، يا آي دي مدير رو بذاره
بعد توي رويداد RowDataBound گريد شرط بذارين كه اگر session(username) با Lable ي كه حاوي آي دي مديره برابر بود، لينك ويرايش يا دكمه ويرايش نمايش داده بشه يا فعال باشه

اوبالیت به بو
پنج شنبه 21 دی 1391, 18:08 عصر
با گریدویو هم نتونستم .
کسی راه دیگه به نظرش نمیرسه ؟

با session چجوریه ؟ تا حالا با session کار نکردم


برای چی نتونستید؟

yekta99
چهارشنبه 27 دی 1391, 12:09 عصر
برای چی نتونستید؟

سلام دوست عزیز

موقعی که تابع رو برای visible باتن میذارم ، ارور میده :

Validation (ASP.Net): The values permitted for this attribute do not include 'CheckEnableStatus(Eval("Id"))'.