私はいくつかのチュートリアルから CustomRoleProvider を実装する方法を学んでおり、以下のように 2 つの主要なメソッドを実装することができました
public override string[] GetRolesForUser(string userName)
{
string connectionString =
ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
DataContext context = new DataContext(connectionString);
Table<UserObj> usersTable = context.GetTable<UserObj>();
UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);
string roleId = userObj.UserRoleID;
if (roleId != null)
return roleId.Select(c => c.ToString()).ToArray();
else
return new string[] { };
}
public override bool IsUserInRole(string userName, string roleName)
{
string connectionString =
ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
DataContext context = new DataContext(connectionString);
Table<UserObj> usersTable = context.GetTable<UserObj>();
UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);
if (userObj != null)
{
string roleId = userObj.UserRoleID;
if (roleId.Equals(roleName))
return true;
}
return false;
}
次に、管理者のみがアクセスできるようにするコントローラーのインデックス メソッドに [Authorize(Roles = "admin")] を追加しました。ページにアクセスしようとすると、たとえば、次の URL を入力すると、制限が正常に実行されるようです。
http://localhost:60353/module
..リダイレクトされました
http://localhost:60353/Account/LogOn?ReturnUrl=%2fmodule
ただし、役割はチェックされていないようでした。
ここで私は何を間違えましたか?