C# MVC Простая пользовательская аутентификация с ролями
TL;DR
Редактировать
По сути, я просто хочу сказать какой-то функции: хорошо, я проверил этого пользователя сам, он в порядке. Теперь сохраните некоторые произвольные данные о нем и создайте для него сеанс, который дает ему разрешения на доступ к определенным частям моего приложения.
что-то в этом роде:
logInUserFrameworkFunction(new UserStruct(int id, string username, RolesEnum[] roles));
И чем все обрабатывается в фоновом режиме, чтобы сделать [Authorize(Roles = RolesEnum.Admin | RolesEnum.Manager)]
атрибутировать работу.
Я мог бы сделать это с сессиями сам, но я хотел бы пропустить эту часть:D
Я играю с MVC и Entity Framework, и теперь я хотел бы реализовать простую аутентификацию пользователей с ролями.
я имею User
класс / таблица в моей базе данных, которая выглядит примерно так:
public class User {
int ID;
string Email;
string Password;
Role Role;
...
}
А также Role
класс, который выглядит так:
public class Role {
int ID;
RoleType Type; // this is an Enum
}
public Enum RoleType {
visitor, employee, admin
}
Теперь проверить в контроллере входа, существует ли пользователь с указанным именем пользователя и паролем, я просто делаю что-то вроде этого:
[HttpPost]
public ActionResult LogIn(LogIn login) {
// If credentials are valid
if(new UserManager().IsValid(login.Username, login.Password)) {
var user = db.getUserByEmail(login.Username);
...
Я мог бы легко хранить пользователя ID
а также Role
в сеансе, а затем проверить учетные данные, позвонив некоторым function
на каждом соответствующем контроллере, но я хочу использовать некоторые функции C# и MVC.
Дело в том, что я бы предпочел сделать это с атрибутами, но я не уверен, как.
Вот как я это представлял:
[Roles(RoleType.visitor, RoleType.employee)]
public ActionResult SomeProtectedAction() {
// only employee and visitor can access this,
// others get redirected to where ever
...
}
1 ответ
Вы можете авторизоваться с помощью ролей следующим образом:
[Authorize(Roles= MyEnum.Admin | MyEnum.Moderator)]
public ActionResult myAction()
{
}
Атрибут Authorize здесь применяется на уровне контроллера, но вы можете применять его только к методам действий, в зависимости от ваших потребностей.
При условии, что вы правильно настроили логику аутентификации (ASP.NET Identity), которая будет возвращать cookie аутентификации, включая роли пользователей. Теперь после успешного входа в систему, если вы делаете запрос к методу контроллера, cookie распаковывается в фоновом режиме и свойство User this.User
заполнен этими данными, включая роли этого пользователя.
Атрибут authorize сделает проверку за вас автоматически.