مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

mohammad-zarei62

عضویت از 1396/12/18

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

  • سه شنبه 7 فروردین 1397
  • 23:52
تشکر میکنم

سلام دوستان

توی جدول کاربران یه فیلد دارم با نام isactive و می خوام توی تمام اکشن ها چک کنم که کاربر اکتیو هست یا نه. این شرط رو دارم توی تمام اکشنها با if چک می کنم. راه حلی هست که اتوماتیک توی تمام اکشن ها سرچ کنه؟ یا حداقل کارو راحت تر کنه

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 8 فروردین 1397
  • 08:56

اگر از Repository استفاده کنید کافیه فقط در اونجا قرار بدید و همه Action های استفاده کننده پیروی میکنند

کاربر سایت

mohammad-zarei62

عضویت از 1396/12/18

  • پنجشنبه 9 فروردین 1397
  • 20:51

من فعلا یه متد توی یه کلاس نوشتم که با فراخونی اون اگه کاربر اکتیو نباشه بره به صفحه لاگین. کدم اینه:

public static RedirectResult CheckUserRollAndAvtive(string username)
        {
            LabkhandModel db = new LabkhandModel();
            
            if (db.Users.FirstOrDefault(u => u.UserName == username).Role.RoleName == "user")
            {
                return new RedirectResult("/Users/Events");
            }
            var user = db.Users.FirstOrDefault(u => u.UserName == username);
            if (!user.IsActive || user.ActiveToDate < DateTime.Now)
            {
                return new RedirectResult("/Account/Login");
            }
            else
            {
                return null;
            }
        }

و اونو توی اکشن فراخونی می کنم:

public ActionResult Index()
        {
            Classes.Labkhand.CheckUserRollAndAvtive(User.Identity.Name);
            
            var user = db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
            var users = db.Users.Where(u=>u.CompanyId==user.CompanyId).Include(u => u.Company).Include(u => u.Job).Include(u => u.Role);
            return View(users.ToList());
        }

ولی کار نمیکنه. breakpoint میزارم و اکتیو بودن کاربر رو چک میکنه و redirect رو return می کنه (return new RedirectResult("/Account/Login"))

ولی وقتی دوباره به اکشن بر می گرده بجای اینکه redirect کنه بقیه کدها رو اجرا می کنه

var user = db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
            var users = db.Users.Where(u=>u.CompanyId==user.CompanyId).Include(u => u.Company).Include(u => u.Job).Include(u => u.Role);
            return View(users.ToList());

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 13 فروردین 1397
  • 19:12

من متوجه شرط های شما در کد نشدم 

باید کد رو Trace کنید و مقادیر بازگشتی رو بررسی کنید تا متوجه بشید کدام خط داره مشکل ایجاد میکنه 

کاربر سایت

mohammad-zarei62

عضویت از 1396/12/18

  • دوشنبه 13 فروردین 1397
  • 20:31

متد اول که توی کلاس نوشتم اول بررسی می کنه که گروه کاربری اگر user بود کاربر رو به "/Users/Events" انتقال بده و در شرط بعدی اگر کاربر اکتیو نباشه یا تاریخ اکتیو بودنش گذشته باشه اونو به صفحه لاگین انتقال میده و اگر هیچ کدوم از شرط ها برقرار نبود کاری نکنه. توی کد دوم اومدم از این متد استفاده کردم:

Classes.Labkhand.CheckUserRollAndAvtive(User.Identity.Name);

حالا اگه کاربر مثلا اکتیو نباشه خط فرمان به return new RedirectResult("/Account/Login"); میره و از بدنه متد میاد بیرون و دوباره میره توی actionresult و الباقی کارها رو انجام میده!!! مگه نباید redirect کنه؟

اصلا ارور نمیده و فقط بعد CheckUserRollAndAvtive تا آخرین خط actionresult میره

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

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

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)