View Full Version : دسترسی محدود به کاربران برای حذف رکوردها
PrinceDotNet
چهارشنبه 19 اردیبهشت 1386, 22:28 عصر
سلام
من سایتمو ساختم و از asp.net2 هم استفاده کردم. من تمام رویه های ذخیره شده رو برای دریافت و حذف رکوردها رو هم نوشتم و دارم استفاده می کنم.
من برای کاربران سایت نقشهای مختلفی مثل ویرایشگر و مدیر در نظر گرفتم. حالا می خوام طوری کدهامو تغییر بدم که اگر فقط کاربر مدیر سایت بود و یک رکورد رو حذف کرد به طور کامل حذف بشه وگر نه که فقط یک فیلد deleted برابر true قرار بگیره که انگار حذف شده و موقعی که رکوردی درخواست شد فقط اگر مدیر بود تمام رکورد ها برگردونده بشه.
من چون تمام رویه های ذخیره شده رو نوشتم یک راه حل ساده برای انجام این تغییرات می خوام به جای اینکه تمام رویه ها رو تغییر بدم !!!
آیا روش خاصی به نظرتون می رسه ؟
ممنون
AminSobati
چهارشنبه 19 اردیبهشت 1386, 23:29 عصر
دوست عزیزم وقتی همه کارها در رویه هاست، چطور بدون تغییرشون میخواین یک عملکردی اصلاح بشه! حداقل SPهایی که حذف رو انجام میدن باید برای مدیر و کاربران عمومی دو عملکرد مختلف داشته باشند. همچنین در مورد Query گرفتن. شاید بشه مثلا از View یا Function به جای نام Table استفاده کرد ولی بدون دست خوردن رویه ها امکان پذیر نیست.
گاهی اوقات ممکنه فیلدهایی به بعضی جداول اضافه بشه و طبیعتا هر جا * SELECT داشتین ستونهای بیشتری میده. اینجا امکانش هست که یک View با نام جدول اصلی (جایگزین) داشته باشین و فقط فیلدهای مناسب رو برگردونین. این یک مثال بود که بعضی مسائل رو با کمترین تغییر حل کنین، اما به نظر نمیرسه خواسته شما با این ترفندها میسر باشه.
PrinceDotNet
چهارشنبه 19 اردیبهشت 1386, 23:36 عصر
منظورم این نبود که تغییری در sp هام ندم. می خوام که کمترین تغییر رو بدم و مثلا ما بقی رو با view ها ,function ها یا trigger ها حل کنم.
mjdeveloper
جمعه 21 اردیبهشت 1386, 02:50 صبح
با اجازه امین خان
داداش یه trigger بنویس و خودتو خلاص کن
به طور مثال
create trigger Rec_delete on tablename
for Delete
as
declare @id int
declare @fld1 type
declare @fld2 type
declare @fld3 type
.
.
.
select @id=id from tb_user where is_logged=1
if @id not in( select id From tb_User where isaddmin=1)
begin
select @fld1=fld1,@fld=fld2,@fld3=fld3,... from Deleted
Declare @deleted
set @deleted=1
insert into tablename values(@fld1,@fld2,@fld3,...,@deleted)
end
حالا این Trigger رو هر جوری که مایلی تغییر بده اگر درست بنویسی دیگه لازم نیست بقیه رویه هات رو کوچکترین تغییری بدی
ببخشید من اولش بد شروع کردم امیدوارم مفید باشه
PrinceDotNet
جمعه 21 اردیبهشت 1386, 14:44 عصر
ممنون از راهنماییتون.
حالا نمی شه یک همچین کاری رو برای SELECT کردن کرد ؟!!
یعنی اگر مدیر بود همه ی رکوردها وگرنه فقط اونایی که به ظاهر حذف نشدن رو نشون بده ؟
ممنون
PrinceDotNet
یک شنبه 23 اردیبهشت 1386, 17:58 عصر
اصلا میشه برای SELECT هم یک چنین کاری رو کرد ؟
AminSobati
یک شنبه 23 اردیبهشت 1386, 23:20 عصر
برای Select نمیشه Trigger نوشت، ولی میشه از توابع استفاده کرد. اونوقت باید همیشه به جای خود Table، از نام تابع استفاده کنین.
در Books Online دنبال Multi Statement Table Valued Function بگردین
mjdeveloper
سه شنبه 01 خرداد 1386, 11:38 صبح
سلام
با توجه به گفته دوست بزگوارمون آقای ثباتی که کاملا صحیحه برای Select نمیشه Trigger نوشت.
من چنین کاری رو توی برنامه خودم انجام می دم یه تابع نوشتم به نام IsAdmin که True یا False برمی گردونه و با توجه به مقدار برگشتی این تابع بصورت Dynamic متن Select رو می سازم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.