私はMVC4サイトを持っており、最近、ロールに関する予期しない動作に気づきました。これは、誤解または見落としていることは確かですが、まだ問題が見当たらないので、ここに行きます;
ログイン時に、Userdata のロール情報を含む authticket を作成します。
Application_AuthenticateRequest で、Role データを取得し、CurrentUser に割り当てます。
Authorize メカニズムを使用する必要があると思われますが、後で User.IsInRole() をチェックすると、おそらく RoleProvider として機能していると考えられるため (config で設定されていない)、SqlServer をヒットしようとしてタイムアウトになる理由を誰でも理解できますか? Global.asaxで割り当てられている現在のユーザーから取得するだけではありませんか?
ティア、ダン
[私の Application_AuthenticateRequest から抜粋]
try
{
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
{
var currentUser = HttpContext.Current.User;
var formsId = currentUser.Identity as FormsIdentity;
var ticket = formsId.Ticket;
string userData = ticket.UserData;
var rolesString = userData.GetValueFromKeyValuePairs<string>("roles", "|");
var rolesList = rolesString.SplitAndType<string>("|").Select(s => s.ToLower().Replace(" ", ""));
if (rolesList.Count() > 0)
{
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(ticket.Name), rolesList.ToArray());
}
}
}
catch (Exception ex)
{
if (Debugger.IsAttached)
{
throw ex;
}
}