0

至少,任何用户都可以为任何员工预订假期,

我已将 [Authorization] 添加到控制器和 @if (User.Identity.IsAuthenticated)

在布局中,因此只有登录的用户才能查看页面。但是我怎么能只允许用户为他们自己预订假期呢?

类似于 if loggedInUserID(这是在创建用户时自动分配的吗?)=currentPersoID,尽管这只是一个猜测,我可能不得不将相同的 loggedInUserID 分配给 personID。


编辑:

[HttpPost]
public ActionResult Create(Holiday holiday)
{    
        var holidays = db.Holidays.Include("Person");
        HolidayList model = new HolidayList();

     //run through person 
     foreach (Person person in model.PList4DD)
        {
         //if Logged in user = person name
            if (HttpContext.User.Identity.Name == person.Name)
            {
                //allow
                if (ModelState.IsValid)
                {
                    db.Holidays.AddObject(holiday);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            else
            { 
                return RedirectToAction("Index"); 
            }

        }

        model.PList4DD = db.People.ToList();
        model.HList4DD = db.Holidays.ToList();

        ViewBag.Id = new SelectList(db.People, "Id", "Name", holiday.Id);
        return View(holiday);
    }

谢谢

4

3 回答 3

3

在您的控制器中,有 HttpContext.User.Identity.Name

它会给你当前登录的人的用户名。也许这可能是一个很好的起点?

于 2012-12-17T12:31:18.397 回答
1

因此,您需要针对用户名或用户 ID 添加额外检查:

我假设您返回到视图的模型是员工类型。

public class Employee
{
    public int Id { get; set; }
    public string UserName { get; set; }
}

public ActionResult Home(int id)
{
    Employee model = // Get employee by id
    return View(model);
}

然后在您的视图中,您可以检查用户名:

@model Employee
@if (User.Identity.IsAuthenticated && User.Identity.Name == model.UserName)
于 2012-12-17T12:35:44.433 回答
1

假设您的视图仅从受限制的操作中调用,添加[Authorize]应该就足够了,不需要@if(User.Identity.IsAuthenticated)在视图本身中做任何事情,因为用户永远不会到达它。

至于您的实际问题,我将为您的预订视图创建视图模型,其中包含当前用户的用户名(或 ID),为简单起见,取用户名,例如

public class BookingViewModel
{
    [HiddenInput]
    public Guid Username { get; set; }
    ...
}

然后在您看来,当您尝试回发到服务器时,您可以验证预订是否有效,例如

[HttpPost]
public ActionResult CreateBooking(BookingViewModel bookingModel)
{
    if (bookingModel.UserId == User.Identity.Name)
    {
        // proceed with booking
        return View("BookingComplete", bookingModel);
    }
    else
    {
        // add model state error
    }
    return View(bookingModel)
}
于 2012-12-17T12:39:58.837 回答