加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 需要了解如何在我的应用程序中管理角色(ASP.NET MVC3)

发布时间:2020-12-15 18:29:55 所属栏目:百科 来源:网络整理
导读:我正在开发一些网站,这是一种在线工作场所,会有一些用户和一些正在进行的计算机编程项目,每个用户可以有多个角色,例如一个特定用户可以是项目的项目经理和开发人员为另一个项目.自然地,项目经理比项目中的开发人员拥有更多的权限.我的问题是如何在我的代码中
我正在开发一些网站,这是一种在线工作场所,会有一些用户和一些正在进行的计算机编程项目,每个用户可以有多个角色,例如一个特定用户可以是项目的项目经理和开发人员为另一个项目.自然地,项目经理比项目中的开发人员拥有更多的权限.我的问题是如何在我的代码中整齐地管理这个?我打算使用我的自定义角色提供程序并使用Authorize属性,但这还不够,因为我需要项目Id和用户ID来查找用户在特定项目中的角色.

解决方法

首先,您需要为扩展角色管理创建其他表,例如项目,以及在操作上下文中与用户的关系,这可能是您的控制器的操作.

一种方法是为角色创建自己的表.在这种情况下,您将只使用Asp网络会员用户,但这一切都取决于您的要求.

其次你必须在MVC中处理它.在我看来,最好的方法是通过你自己的自定义Authorization属性来实现它,并用你的自定义授权属性而不是[Authorization]属性来装饰你的控制器的动作.

它非常简单.

[CustomAuthorize]
//[Authorize]
public ActionResult GetProjectTasks(string projectname)
{

}

为此,您必须使用FilterAttribute固有您的类,并且还必须实现IAuthorizationFilter接口.

public void OnAuthorization(AuthorizationContext filterContext)
    {
        HttpCookie authCookie = filterContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];

        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            var identity = new GenericIdentity(authTicket.Name,"Forms");
            var principal = new GenericPrincipal(identity,new string[] { authTicket.UserData });
            filterContext.HttpContext.User = principal;
        }

        var controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
        var action = filterContext.ActionDescriptor.ActionName;
        var user = filterContext.HttpContext.User;
        var ip = filterContext.HttpContext.Request.UserHostAddress;

        var isAccessAllowed = CustomAuthenticationLogic.IsAccessAllowed(controller,action,user,ip);
        if (!isAccessAllowed)
        {
            // Code if user is authenticated
            FormsAuthentication.RedirectToLoginPage();
        }            
    }

在OnAuthorization方法中,您可以获得自定义授权逻辑中可能需要的所有信息,如HttpContext,Controller name,Action name.您必须从此方法调用自定义身份验证逻辑.
您的自定义身份验证逻辑可能如下所示.

public class CustomAuthenticationLogic
{
    public static bool IsAccessAllowed(string controller,string action,IPrincipal user,string ip)
    {
        //
        // Your custom logic here              
        //              
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读