Примітка: Я використовую vs2013 express і нічого іншого не встановив.
Я будую Інтранет-сайт з наступними цілями автентифікації / авторизації:
- Спеціальні ролі за допомогою класу Ролі
- Не потрібно входити в систему, якщо ви ввійшли у вікна, то вам дозволено переглядати програму
- Вмійте використовувати атрибути [Authorize (Roles = "Admin")]
- Вмійте керувати Користувачами (Створити / Видалити / Список / Редагувати) на сторінці UserManagement.
Я слідував за цим: 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
але я не знаю, як створити / перерахувати користувачів ... це те, що я маю на сьогодні:
Я додав користувача і призначив його ролі, коли я використовую Membership.GetAllUsers (), він не повертає жодного
Біти 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>
Я додав свого першого користувача в Global.asax так:
if(!Roles.RoleExists("Admin"))
{
Roles.CreateRole("Admin");
Roles.AddUserToRole(@"JIMMYT1988jimmyt1988", "Admin");
}
Користувач і роль працюють, тому що якщо я заблокую доступ до адміністратора, я дозволю .. тоді як якщо я створив користувача без додавання ролі, він не мав дозволу на доступ ... так що все добре і працює.
це я блокую доступ лише до ролі адміністратора:
[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);
}
}
Тому я припускаю, що користувач та роль адміністратора єпрацює правильно, і я бачу цілі в базі даних ... Вищезазначений контролер є частиною абстрактного -> конкретного відображення для конкретних користувачів постачальника членства ... але я налагодив у рядку GetAllUsers, і це фактично повертає порожній список, це "не те, що відображення йде не так.
Нарешті я називаю це:
MembershipUserCollection users = Membership.GetAllUsers();
який не повертає користувачів.
Будь ідея?
Відповіді:
0 для відповіді № 1Спочатку потрібно створити користувача за допомогою статики Метод Membership.CreateUser:
MembershipUser newUser = Membership.CreateUser(@"JIMMYT1988jimmyt1988", "password");
А потім ви можете додати цього користувача до ролі.
Щодо Вашого коментаря:
Як мені створити користувача, якому не потрібен пароль, і все ж все ще зможете перерахувати користувачів?
Я не впевнений, але я думаю, що ви можете встановити пароль Членство властивості, щоб "0" була "необхідною довжиною" пароля.
Ви можете додати це до розділу членства на вашому web.config:
minRequiredPasswordLength="0"