0

少なくとも、どのユーザーも従業員の休日を予約できます。

[Authorization] をコントローラーに追加し、@if (User.Identity.IsAuthenticated) を追加しました。

ログインしたユーザーのみがページを表示できるようにします。しかし、ユーザーが自分で休暇を予約できるようにするにはどうすればよいですか

if loggedInUserID(これはユーザーが作成されたときに自動的に割り当てられますか?) =currentPersonID のようなものですが、これは単なる推測であり、おそらく同じ 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 に答える