0

私がやろうとしているのは、MVC3コントローラーにログインしているユーザーの役割に基づいてクエリをフィルタリングすることです。私はユーザーが1つの役割だけを持つように制限しています。ユーザーは複数の役割を持つことはできません。私はいくつかのコードスニペットを持っていますが、これが進むべき道かどうかはわかりません。そしてまた誰かが私の目標を達成するために私を助けることができれば

  string[] roles = Roles.GetRolesForUser();

    string color= roles[0];

    string vcolor = color.Substring(0, 4);

    switch (vcolor)
                {
                    case "Rewa":
                        vcolor = "white";
                        break;
                    case "Ukau":
                        vcolor == "black";
                        break;
                    case "Whau":
                        vcolor = "green";
                        break;
                    case "Angi":
                        vcolor = "Blue";
                        break;
                }

public ActionResult _MembersView()
    {
        var pagenew = db.Members

            .Where(u => u.color == vcolor)(I will want to then set this condition to the vcolor dynamically)
            .OrderBy(u => u.Tcd);
            //.Take(12);
        return PartialView(pagenew);

    }
4

1 に答える 1

0

ロジックをメソッドに入れましょう。

private string GetVColorForCurrentUser()
{
    string[] roles = Roles.GetRolesForUser();
    string color = roles[0];
    string vcolor = color.Substring(0, 4);
    switch (vcolor)
    {
        case "Rewa":
            return "white";
        case "Ukau":
            return "black";
        case "Whau":
            return "green";
        case "Angi":
            return "Blue";
    }
    return vcolor;
} 

次に、このメソッドを呼び出します。

public ActionResult _MembersView()
{
    var pagenew = db
        .Members
        .Where(u => u.color == GetVColorForCurrentUser())
        .OrderBy(u => u.Tcd);
    return PartialView(pagenew);
}

または、フィルターメソッドとして直接記述します。

private bool CurrentUserHasSameVColor(Member member)
{
    string[] roles = Roles.GetRolesForUser();
    string color = roles[0];
    string vcolor = color.Substring(0, 4);
    switch (vcolor)
    {
        case "Rewa":
            vcolor = "white";
            break;
        case "Ukau":
            vcolor = "black";
            break;
        case "Whau":
            vcolor = "green";
            break;
        case "Angi":
            vcolor = "Blue";
            break;
    }
    return member.color == vcolor;
}

その後:

public ActionResult _MembersView()
{
    var pagenew = db
        .Members
        .Where(CurrentUserHasSameVColor)
        .OrderBy(u => u.Tcd);
    return PartialView(pagenew);

}
于 2013-01-04T15:46:49.133 に答える