Как работает Roles.IsUserInRole(Admin)?

Я пытался скрыть и показать строку меню на основе роли пользователя, вошедшего в систему. Итак, я написал код в режиме бритвы, который

   @if ( Request.IsAuthenticated && HttpContext.Current.User.IsInRole( "Admin" ) ) {
                 <li>Projects link</li>
                 <li>Profile link</li>
            }

а также это

 @if (Roles.IsUserInRole( "Admin" ) ) {
                 <li>Projects link</li>
                 <li>Profile link</li>
            }

Я пробовал оба кода, они работают, но проблема в том, что они не работают для всех администраторов. Он работает только для одного администратора, когда всего 4 пользователя имеют роль администратора.

А также то же самое, когда я объявляю другого финансового администратора роли пользователя, который работает для одного пользователя!

Все остальные пользователи блокируют меню, но роли пользователей одинаковы для четырех пользователей. Я не знаю, как получить только одного пользователя в качестве администратора, когда остальные три также имеют одну и ту же роль. Кто-нибудь может объяснить, где метод получения ролей из базы данных и как он работает?


person Anto King    schedule 19.02.2013    source источник


Ответы (2)


Метод IsInRole (и все остальные методы) — это хранимые процедуры в вашей базе данных. В вашей базе данных есть таблицы MemberShip. Хранимые процедуры работают с этими таблицами. Если вы говорите, что код будет работать для одного пользователя с подключенной ролью администратора, первое, что я хотел бы проверить, это действительно ли другие пользователи, для которых он не будет работать, имеют эту роль. Проверьте таблицу для всех подключений пользователей и ролей в вашей базе данных.

person LockTar    schedule 19.02.2013
comment
S locktar я проверил! И еще одна вещь, которую я использовал для таблицы asp.net_users, таблицы asp.net_userinroles и таблицы asp.net_roles, чтобы получить информацию о роли пользователя! четыре человека с одинаковым идентификатором пользователя, и этот идентификатор пользователя принадлежит роли администратора! я не знаю, как это работает для одного пользователя, а не для других пользователей - person Anto King; 19.02.2013
comment
Уважаемый Анто, Вы говорите, что четыре человека имеют одинаковый идентификатор пользователя? Это невозможно. Это не должно быть так, как это работает. У вас есть несколько таблиц. У вас есть таблица Users, Membership, UserInRole en Roles. Пользователь с именем example должен иметь запись в членстве и в user. Эти таблицы связаны своим уникальным идентификатором GUID. У вас также есть запись для администратора роли в таблице ролей. Уникальный идентификатор пользователей и таблицы членства используется для подключения к идентификатору роли. Это делается в таблице userinrole. Если вы создаете нового пользователя (пример 2), этот guid также помещается в таблицу userinrole. - person LockTar; 20.02.2013
comment
Итак, для одного пользователя. У вас есть две записи в двух разных таблицах. - person LockTar; 20.02.2013

Проверьте свою таблицу webpages_UsersInRoles в своей базе данных, так как именно она определяет, какие роли привязаны к тем или иным профилям пользователей.

Возможно, также существует проблема с назначением ролей при создании пользователя. Проверьте метод регистрации на контроллере учетной записи. У вас должна получиться такая строка:

Roles.AddUserToRole(model.UserName, model.userRole);

В противном случае роли не могут быть назначены при создании пользователя.

person Whiplash450    schedule 19.02.2013
comment
Нет, у меня нет метода реестра, я назначил все роли в самой базе данных. а также в моей базе все роли назначены правильно. Для этих целей я использую таблицы ASPNET.Userroles, aspnet.user, asp.net_userinroles. - person Anto King; 19.02.2013
comment
В ответ на информацию, которую вы предоставили в ответ LockTar, вам, вероятно, следует использовать UserId в качестве уникального ключа для таблицы профилей пользователей в вашей базе данных. Наличие четырех пользователей с одним и тем же идентификатором, вероятно, где-то вызывает проблему. - person Whiplash450; 19.02.2013