C# 在这种情况下,哪种方法/实践最好?我必须使用会话吗?
(任何人都能帮我为这个问题找到一个最好的题目吗?我试着去想……但我没有比这个更好的题目了。) 让我解释一下我下面的情景和疑问 我正在创建一个网站,将管理每个用户很多项目。每个用户只能是所有者或参与者 我有登录用户的公共区域、项目中所有用户都可以访问的区域以及只有所有者才能访问的区域 我为控制器和操作创建OwnerAuthorize属性和SimpleAuthorize属性:C# 在这种情况下,哪种方法/实践最好?我必须使用会话吗?,c#,asp.net-mvc,session,authorization,C#,Asp.net Mvc,Session,Authorization,(任何人都能帮我为这个问题找到一个最好的题目吗?我试着去想……但我没有比这个更好的题目了。) 让我解释一下我下面的情景和疑问 我正在创建一个网站,将管理每个用户很多项目。每个用户只能是所有者或参与者 我有登录用户的公共区域、项目中所有用户都可以访问的区域以及只有所有者才能访问的区域 我为控制器和操作创建OwnerAuthorize属性和SimpleAuthorize属性: public class OwnerAuthorizeAttribute : AuthorizeAttribute {
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;
}
}
}
}
对于少数用户来说,这没关系。但是对于许多用户来说,我有一个数据库查询来为每个调用的操作收集相同的信息。所以,我想使用一个会话来访问当前用户和项目的一些信息
处理此场景的最佳方式/实践是什么