【问题标题】:C# MVC Simple Custom Authentication with Roles带有角色的 C# MVC 简单自定义身份验证
【发布时间】:2016-10-27 15:29:32
【问题描述】:

TL;DR

编辑

基本上,我只是想告诉一些功能:好的,我已经亲自检查过这个用户,他没事。现在存储一些关于他的任意数据并为他创建一个会话,允许他访问我的应用程序的某些部分。

类似的东西:

logInUserFrameworkFunction(new UserStruct(int id, string username, RolesEnum[] roles));

而且所有事情都在后台处理,以使[Authorize(Roles = RolesEnum.Admin | RolesEnum.Manager)] 属性起作用。

我可以自己做这个,但我想跳过那部分:D


我正在使用 MVC 和实体框架,现在我想用角色实现简单的用户身份验证。

我的数据库中有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);
...

我可以轻松地将用户 IDRole 存储在会话中,然后通过在每个相关控制器上调用一些 function 来检查凭据,但我想使用一些 C# 和 MVC 功能。


事情是我宁愿用属性来做,但我不知道怎么做。

这是我想象中的样子:

[Roles(RoleType.visitor, RoleType.employee)]
public ActionResult SomeProtectedAction() {
// only employee and visitor can access this,
// others get redirected to where ever
...
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc authentication custom-attributes


    【解决方案1】:

    您可以像这样使用角色进行授权:

    [Authorize(Roles= MyEnum.Admin | MyEnum.Moderator)]
    public ActionResult myAction()
    {
    }
    

    Authorize 属性在此应用于控制器级别,但您只能将其应用于操作方法,具体取决于您的需要。

    如果您正确设置了身份验证逻辑(ASP.NET 身份),它将返回一个包含用户角色的身份验证 cookie。 现在成功登录后,如果您向控制器方法发出请求,cookie 会在后台解包,并且用户属性 this.User 会填充此数据,包括该用户的角色。

    authorize 属性会自动为你做检查。

    【讨论】:

    • 这是 Roles 的真正力量,您可以在其中提供对控制器的大规模访问,然后在每个方法级别上缩小访问权限。因此,假设您有一个名为 Staff 的角色,它需要访问一个控制器(整个控制器都经过修饰,因此任何处于 Staff 角色的人都可以访问它)。但是,假设您只想将删除功能限制为管理员,因此您使用管理员角色专门装饰删除方法,以便只有 既是员工管理员的人才能删除.只是员工和用户的人不能。 (业务逻辑:每个帐户需要 2 个角色)
    • 我知道如何使用这样的角色,但如何登录我的用户。我可以调用这样的函数吗? :identityLoginUser(new identityUser(int id, string username, RolesEnum[] roles),然后他在后台制作 cookie,一切都在以最小的努力工作?
    • 如果您了解 ASP.NET Identity 的基础知识,那就太好了 :-) 查看 here 并搜索“Sign-In Helper - The Basic Identity 2.0 Sign-In API”。这个v2.0,有更新的,不过应该差别不大吧。
    猜你喜欢
    • 2013-01-05
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2017-08-26
    相关资源
    最近更新 更多