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

前端之家收集整理的这篇文章主要介绍了c# – 需要了解如何在我的应用程序中管理角色(ASP.NET MVC3)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一些网站,这是一种在线工作场所,会有一些用户和一些正在进行的计算机编程项目,每个用户可以有多个角色,例如一个特定用户可以是项目的项目经理和开发人员为另一个项目.自然地,项目经理比项目中的开发人员拥有更多的权限.我的问题是如何在我的代码中整齐地管理这个?我打算使用我的自定义角色提供程序并使用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              
        //              
    }
}
原文链接:https://www.f2er.com/csharp/98685.html

猜你在找的C#相关文章