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.
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ł?
Odpowiedzi:
0 dla odpowiedzi № 1Najpierw 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"