2014-12-14 2 views
0

Привет всем, Я внедрил свою собственную систему регистрации и входа в приложение для блогов, которое я писал. Я использовал первый подход к базе данных и создал несколько таблиц (dbo.UserProfiles - содержащую пользовательскую информацию) и другие таблицы, с которых я сгенерировал модель данных сущности. Однако я дошел до стадии, когда мне нужно было создать панель администратора, а затем я понял, что мне нужен способ связать каждого пользователя с определенной ролью (Модератор, администратор, гость) и ограничить доступ к определенным страницам на основе этих ролей. Мой вопрос в том, как я могу реализовать поставщик роли в существующей базе данных, так как я не использовал систему членства asp.net mvc по умолчанию, а также могу использовать роли для разрешения или ограничения доступа к определенным страницам на моем веб-сайте.Добавление ролей в существующий веб-сайт asp.net mvc

+0

У вас есть еще одна таблица для ролей и третью таблицу для определения пользовательских ролей? – Gouda

+0

@mGouda да, я создал таблицу с именем dbo.roles с столбцом roleId и roleName, а также таблицу с именем dbo.UsersInRoles с столбцами roleId и UserId и задал отношение внешнего ключа. После этого я нажал на дизайнере edmx и обновил существующую модель, чтобы добавить новые добавленные таблицы. Затем я создал новый контроллер под названием adminController, который добавил атрибут [Authorize (Role = "Admin")]. После перехода на эту страницу я получил сообщение об ошибке «Связанная с сетью или конкретная ошибка экземпляра при установлении соединения с сервером sql. – ibnhamza

+0

ошибка, о которой вы говорите, здесь не имеет ничего общего с исходным вопросом, эта ошибка указывает, что вы не можете подключиться к базе данных sql-сервера, дважды проверьте connectionstring и связанные с ней вещи – Gouda

ответ

0

Вы можете создать свой собственный провайдер членства, наследуя его от класса MembershipProvider. В MSDN есть отличный пример того, как это сделать.

http://msdn.microsoft.com/en-us/library/44w5aswa(v=vs.100).aspx

Вы также должны implment на роль поставщика.

http://msdn.microsoft.com/en-us/library/tksy7hd7(v=vs.100).aspx

+0

Я уже создал систему членства и ive ушел далеко с приложением, которое я не могу выбросить из системы членства и начать реализацию стандартного, предоставленного asp.net mvc. Мне нужен способ добавить поставщика роли в существующую базу данных и синхронизировать его с существующей пользовательской системой членства, которую я создал. – ibnhamza

+0

Если вы следуете примерам, найденным в MSDN, которые я опубликовал, вы можете создать пользовательский поставщик членства, который будет делать то, что вы хотите. – nerdybeardo

0

вы можете создать свой собственный основной и идентичность. Внедрите метод IsInRole. Аутентифицируйте свой запрос в методе global.asax Application_AuthenticateRequest. А затем добавьте [Authorize(Roles = "Admin")] атрибут к указанным действиям.

Вот хороший example и ansver.

+0

, что я думаю, это путь, только проблема в том, что я новичок в этой технологии, и я не знаю, как это сделать. можете ли вы помочь с некоторым кодом? – ibnhamza

0

В следующем примере показано, как указать, что контроллер доступен только пользователям в ролях «Администраторы».

[Authorize(Roles="Administrators")] 
public class AdminController : Controller 
{ 
    . . . 
} 

В следующем примере показано, как ограничить доступ к действию внутри контроллера только указанному списку ролей.

[Authorize(Roles="Moderators,Administrator")] 
public List<myObject> GetRestrictedData() 
{ 
    . . . 
} 

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

[Authorize(Users="Jhon,Games")] 
public class RestrictedContentController : Controller 
{ 
    . . . 
} 

Reference

+0

Я использовал первый метод выше, и я получил сообщение об ошибке «произошла связанная с сетью или конкретная ошибка экземпляра». Я смущен, потому что это только началось, когда я добавил эти две таблицы и обновил мою модель. поскольку другие страницы приложения, требующие подключения к базе данных, работают нормально, без каких-либо проблем. только страница, которую я добавил [Authorize (Roles = "Admin")] вызывает эту ошибку. – ibnhamza

+0

Извините, я понятия не имею, но я рекомендую вам просмотреть шаги, которые вы сделали после добавления новых таблиц (ролей, userRoles), таких как создание edmk и связанных с ними контроллеров и представлений и т. Д., Также проверьте [этот вопрос SO] (http: // stackoverflow. ком/вопросы/21996191/как к регистрации по прибытию пользователя-роли-в-Mvc-5-идентичности) – Gouda

Смежные вопросы