2013-12-19 4 views
3

Примечание: Я использую vs2013 express и ничего не установил.Я добавил пользователя и назначил его роли, когда я использую Memberhip.GetAllUsers(), он возвращает none

Я строй сайта интранета со следующими целями аутентификации/авторизации:

  • пользовательских ролей, используя класс ролей
  • Нет необходимости для регистрации в, если вы вошли в окно , то вам разрешено видеть приложение
  • Можете использовать [Авторизовать (Роли = «Администратор»)] вид атрибутов
  • Уметь мужчине возраст пользователей (Создать/Удалить/Список/Изменить) на странице 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(@"JIMMYT1988\jimmyt1988", "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(); 

, который не возвращает пользователей.

Любая идея?

+1

Почему этот вопрос есть вниз голосование? Могу ли я добавить дополнительную информацию? Я довольно новичок в C# и т. Д. – Jimmyt1988

+0

Пользователь? JIMMYT1988 \ jimmyt1988 "существует? – alexmac

+0

Я добавил немного больше к моему OP, который говорит, почему я сделал предположение, что пользователь действительно существует. – Jimmyt1988

ответ

0

Прежде всего, необходимо создать пользователя с помощью статического Membership.CreateUser method:

MembershipUser newUser = Membership.CreateUser(@"JIMMYT1988\jimmyt1988", "password"); 

И тогда вы можете добавить этого пользователя к роли.

Что касается Вашего комментария:

Как идти о создании пользователя, который не нужен пароль и еще все еще быть в состоянии перечислить пользователей вне дома?

Я не уверен, но я думаю, что вы можете установить связанные с паролем свойства Membership, чтобы иметь «0» «требуемую длину» пароля.

Вы можете добавить это в разделе членства вашего web.config:

minRequiredPasswordLength="0" 
+0

minRequiredPasswordLength, к сожалению, не работает с 0. "Дополнительная информация: Предоставленный пароль недействителен. Пароли должны соответствовать требованиям к силе пароля, настроенным для поставщика по умолчанию." – Jimmyt1988