C# 在这种情况下,哪种方法/实践最好?我必须使用会话吗?

C# 在这种情况下,哪种方法/实践最好?我必须使用会话吗?,c#,asp.net-mvc,session,authorization,C#,Asp.net Mvc,Session,Authorization,(任何人都能帮我为这个问题找到一个最好的题目吗?我试着去想……但我没有比这个更好的题目了。) 让我解释一下我下面的情景和疑问 我正在创建一个网站,将管理每个用户很多项目。每个用户只能是所有者或参与者 我有登录用户的公共区域、项目中所有用户都可以访问的区域以及只有所有者才能访问的区域 我为控制器和操作创建OwnerAuthorize属性和SimpleAuthorize属性: public class OwnerAuthorizeAttribute : AuthorizeAttribute {

(任何人都能帮我为这个问题找到一个最好的题目吗?我试着去想……但我没有比这个更好的题目了。)

让我解释一下我下面的情景和疑问

我正在创建一个网站,将管理每个用户很多项目。每个用户只能是所有者或参与者

我有登录用户的公共区域、项目中所有用户都可以访问的区域以及只有所有者才能访问的区域

我为控制器和操作创建OwnerAuthorize属性和SimpleAuthorize属性:

public class OwnerAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var projectId = int.Parse(httpContext.Request.Params.Get("projectId"));
        var userId = httpContext.User.Identity.GetUserId<int>();
        project currentProject = null;

        using (var projectService = new ProjectsService())
        {
            currentProject = projectService.Find(projectId).Result;
        }

        if (currentProject == null)
        {
            return false;
        }
        else
        {
            if (currentProject.OwnerId == userId)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

public class SimpleAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var projectId = int.Parse(httpContext.Request.Params.Get("projectId"));
        var userId = httpContext.User.Identity.GetUserId<int>();
        Project currentProject = null;

        using (var projectService = new ProjectsService())
        {
            currentProject = projectService.Find(projectId).Result;
        }

        if (currentProject == null)
        {
            return false;
        }
        else
        {
            if (currentProject.OwnerId == userId 
                || currentProject.Users.Select(u => u.Id).Contains(userId))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
公共类OwnerAuthorizeAttribute:AuthorizeAttribute
{
受保护的覆盖bool AuthorizeCore(HttpContextBase httpContext)
{
var projectId=int.Parse(httpContext.Request.Params.Get(“projectId”);
var userId=httpContext.User.Identity.GetUserId();
project currentProject=null;
使用(var projectService=new projects服务())
{
currentProject=projectService.Find(projectd.Result);
}
if(currentProject==null)
{
返回false;
}
其他的
{
如果(currentProject.OwnerId==用户ID)
{
返回true;
}
其他的
{
返回false;
}
}
}
}
公共类SimpleAuthorizeAttribute:AuthorizeAttribute
{
受保护的覆盖bool AuthorizeCore(HttpContextBase httpContext)
{
var projectId=int.Parse(httpContext.Request.Params.Get(“projectId”);
var userId=httpContext.User.Identity.GetUserId();
Project currentProject=null;
使用(var projectService=new projects服务())
{
currentProject=projectService.Find(projectd.Result);
}
if(currentProject==null)
{
返回false;
}
其他的
{
如果(currentProject.OwnerId==用户ID
||currentProject.Users.Select(u=>u.Id).Contains(userId))
{
返回true;
}
其他的
{
返回false;
}
}
}
}
对于少数用户来说,这没关系。但是对于许多用户来说,我有一个数据库查询来为每个调用的操作收集相同的信息。所以,我想使用一个会话来访问当前用户和项目的一些信息

处理此场景的最佳方式/实践是什么