Как работи 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
Уважаеми Анто, казвате, че четирима души имат еднакъв потребителски идентификатор? Това не е възможно. Това не трябва да е начинът, по който работи. Имате няколко маси. Имате таблица Потребители, Членство, UserInRole и Роли. Потребителят с примерно име трябва да има запис в членство и в потребител. Тези таблици са свързани чрез техния уникален GUID. Имате и запис за ролята на администратор в таблицата с роли. Уникалният guid на потребителите и таблицата за членство се използва за свързване с guid на ролята. Това се прави в таблицата userinrole. Ако създадете нов потребител (example2), този 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