/ / Dodałem użytkownika i przypisałem go do roli, gdy używam Membership.GetAllUsers () zwraca brak - C #, asp.net, member, asp.net-mvc-5, sqlmembershipprovider

Dodałem użytkownika i przypisałem mu rolę, kiedy używam Membership.GetAllUsers (), to zwraca none - c #, asp.net, member, asp.net-mvc-5, sqlmembershipprovider

Uwaga dodatkowa: używam vs2013 express i nie zainstalowałem nic więcej.

Buduję witryna intranetowa z następującymi celami uwierzytelniania / autoryzacji:

  • Role niestandardowe przy użyciu klasy Roles
  • Nie ma potrzeby logowania się, jeśli jesteś zalogowany w systemie Windows, możesz zobaczyć aplikację
  • Umiejętność korzystania z atrybutów typu [Autoryzuj (Role = "Administrator")]
  • Umiejętność zarządzania użytkownikami (tworzenie / usuwanie / wyświetlanie / edycja) ze strony Zarządzanie użytkownikami.

Śledziłem to: http://weblogs.asp.net/scottgu/archive/2006/07/23/Recipe_3A00_-Implementing-Role-Based-Security-with-ASP.NET-using-Windows-Authentication-and-SQL-Server.aspx

ale nie jestem pewien, jak utworzyć / wyświetlić listę użytkowników ... oto, co mam do tej pory:

Dodałem użytkownika i przypisałem mu rolę, kiedy używam Membership.GetAllUsers () nie zwraca żadnego

Bity Web.config:

<authentication mode="Windows"></authentication>

<authorization>
<deny users="?" />
</authorization>

<roleManager enabled="true" defaultProvider="SqlRoleManager">
<providers>
<clear/>

<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="EFDbContext"
applicationName="TEST" />

</providers>
</roleManager>

<membership defaultProvider="SqlProvider"
userIsOnlineTimeWindow="15">
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="EFDbContext"
applicationName="TEST"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10" />
</providers>
</membership>

Dodałem pierwszego użytkownika w Global.asax w ten sposób:

        if(!Roles.RoleExists("Admin"))
{
Roles.CreateRole("Admin");
Roles.AddUserToRole(@"JIMMYT1988jimmyt1988", "Admin");
}

Użytkownik i rola działają, ponieważ jeśli zablokuję dostęp do administratora, mam pozwolenie ... podczas gdy gdybym utworzył użytkownika bez dodawania roli, nie miał on dostępu ... więc wszystko jest w porządku i działa.

to ja blokuję dostęp tylko do roli administratora:

[Authorize(Roles = "Admin")]
public class UserController : Controller
{
private IUserRepository repository;

public UserController(IUserRepository repo)
{
repository = repo;
}

public PartialViewResult List()
{
IEnumerable<User> users = repository.Users;

UserListViewModel viewModel = new UserListViewModel();
viewModel.Users = users;
viewModel.TotalUsers = Membership.GetNumberOfUsersOnline().ToString();

return PartialView(viewModel);
}
}

Więc zakładam, że użytkownik i rola administratora sądziała poprawnie i widzę wpisy w bazie danych ... Powyższy kontroler jest częścią abstrakcyjnego -> konkretnego mapowania dla konkretnie użytkowników dostawcy członkostwa ... ale debugowałem w linii GetAllUsers i faktycznie zwraca pustą listę, to czy mapowanie nie idzie źle.

Wreszcie nazywam to:

            MembershipUserCollection users = Membership.GetAllUsers();

która nie zwraca żadnych użytkowników.

Dowolny pomysł?

wprowadź opis obrazu tutaj

Odpowiedzi:

0 dla odpowiedzi № 1

Najpierw musisz utworzyć użytkownika przy użyciu pliku static Membership.CreateUser:

MembershipUser newUser = Membership.CreateUser(@"JIMMYT1988jimmyt1988", "password");

Następnie możesz dodać tego użytkownika do roli.

Jeśli chodzi o twój komentarz:

Jak mam utworzyć użytkownika, który nie potrzebuje hasła, a mimo to nadal być w stanie wyświetlić listę użytkowników?

Nie jestem pewien, ale myślę, że możesz ustawić hasło związane Członkostwo właściwości tak, aby „0” było „wymaganą długością” hasła.

Możesz dodać to do sekcji członkostwa w swoim web.config:

minRequiredPasswordLength="0"