PDA

View Full Version : ایجاد کنترل بیشتر روی Datagrid



aidinwashere
جمعه 08 مهر 1384, 21:16 عصر
سلام.
سوالم اینه که چجوری وقتی من دی تاپیک های اینجا پست خودم رو میبینم سیستم اینجا بهم اجازه میده تا پیغامم رو ادیت کنم و مثلا نمیزاره پیغام های شما رو ادیت کنم؟ و یا به مدیران اجازه پاک کردن یا ادیت همه پست ها رو میده؟
حدس من اینه که با Datagrid نشه این عمل رو کنترل کرد و باید دستی table رو ساخت.
دوستی میگفت که با قرار دادن case در دستور sql میتونی.
نظر شما چیست؟

با احترام.

Behrouz_Rad
جمعه 08 مهر 1384, 22:27 عصر
دوست گرامی!
سوال شما به مبحث Role ها مربوط میشه که بارها در این بخش بدان پرداخته شده است.
به طور خلاصه عرض می کنم.
روال کار بدین شکل است که زمانی که کاربر مورد تصدیق هویت قرار گرفت و Ticket ای بر روی سیستم وی ایجاد شد، در این Ticket اطلاعاتی پیرامون سطح دسترسی کاربر قرار می گیرد.
در زمان ورود کاربر به صفحات مختلف، با نوشتن کد مربوطه در روال AuthenticateRequest فایل Global.asax، این اطلاعات استخراج شده و بنا به نوع سطح دسترسی، گزینه هایی به وی نمایش داده می شود یا نمی شود.
اطلاعات بیشتر:
در هنگام ورود کاربر به سایت، یک Context یا زمینه ی کاری به وی تعلق می گیرد.
شی Context دارای خاصیتی با نام User است که به کاربر جاری اشاره می کند.
کلاس GenericPrincipal، نیز دو پارامتر می پذیرد. 1) نام کاربری که از Ticket استخراج می شود. 2) اطلاعاتی که حاوی سطح دسترسی کاربر است.
با انتساب خاصیت User شی Context به کلاس GenericPrincipal، کاربر برای سیستم شناخته می شود و ...
موفق باشید.

aidinwashere
شنبه 09 مهر 1384, 01:41 صبح
با تشکر از جوابتون.
همونطور که در متن تاپیک سعی کردم برسونم اینه که : مشکل من در شناسایی اینکه کی مدیر است و کی کاربر است نیست.
بلکه مشکل من اینه که چطوری با DataGrid این دکمه های Edit و Delete رو فقط برای کاربری که همون پست رو زده نشون بدم نه کس دیگه ای.
یعنی شما بتونی دکمه Delete رو فقط رو پست هایی که خودت زدی ببینی نه رو پست های من.
مشکل من نمایش این دکمه ها هست که چطوری در قسمت DataGrid بفمم که اولا این پست را خود کاربر جاری زده و دوما برایش دکمه های delete , edit رو نشون بدم.
چون وقتی dataset رو به datagrid نسبت میدم که نمیشه احتمالا باید دستی یه کار هایی کرد. ترجیحا با همون datagrid بشه بهتره تا دردسر کمتری برای بازنویسی کد داشته باشم.
با احترام و تشکر که دلسوز و پیگیر کار بچه های این سایت هستین.

Behrouz_Rad
شنبه 09 مهر 1384, 08:27 صبح
حتما از Repeater استفاده کنید.
همین صفحه رو در نظر بگیرید.
چیزی که در اینجا می بینید، یک TR است که بر اساس هر پست ایجاد می شود و یک Table را در خود جای می دهد.
تابعی بنویسید که اقدام به استخراج Role های کاربر کند.
با شرطی شبیه به:


Image1.Visible = IIf(YourCondition,True,False)

در قسمت YourCondition، تابع شما فراخوانی می شود و در صورتی که سطح دسترسی کاربر مثلا Moderate بود، Image که نمایش دهنده ی دکمه ی حذف است نمایش داده می شود و در غیر اینصورت نمایش داده نمی شود.
در صورتی که قصد استفاده از DataGrid را دارید، به منظور جلوگیری از Round Trip بسیار، در روال Page_Load سطح دسترسی کاربر را چک کرده و در متغیری (مثلا Boolean البته اگر فقط دو سطح دسترسی وجود دارد) قرار دهید و در روال ItemDataBound کنترل DataGrid همانند توضیحات فوق عمل کنید.
موفق باشید.