2016-01-02 31 views
0

在我正在处理的项目中,管理员可以删除用户发布的评论。当评论被删除时,我会调用一个函数来检查用户是否仍然有足够的评论来访问网站的特定部分。如何在角色更改后退出特定用户?

如果用户没有足够的意见,他的角色变化和这种方法被称为:

public void AfterRoleChanges(string c) 
    { 
     var authenticationManager = System.Web.HttpContext.Current.GetOwinContext().Authentication; 
     authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 

     var user = UserManager.FindById(c); 
     var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); 

     authenticationManager.SignIn(new AuthenticationProperties { IsPersistent = false }, identity); 
    } 

其中c =用户ID。但问题在于,如果管理员点击删除按钮,管理员会以该用户身份登录并登录,因为身份验证管理员只能从“当前”上下文中调用。

有没有办法获得特定userId的authenticationmanager?

+1

我有一种感觉,你在这里误入歧途。某人如何从某人自己的会话中注销另一个用户?用户仍然*认证*,删除角色与*授权*有关。你必须确保用户从角色中删除时,会注意到他们没有被授权*。也许你可以在这种情况下给他们一个体面的信息。 –

+0

@GertArnold向用户添加角色时,角色不会自动更新。您首先必须注销并重新获得新角色。这就是为什么我想知道一种让用户在任何角色发生变化时立即注销并立即登录的方法。 – Eselko

+0

是的,我说:他们只能注意到通过更改授权。你永远不能(例如)删除他们的本地认证令牌/ cookie。他们为什么要知道呢?也许他们可以继续做他们正在做的事情,因为授权在那里没有改变。 –

回答

0

HttpContext.Current有一个HttpContext类型。您可以在静态类中定义列表或字典,以便在登录时存储上下文,并在注销时将其丢弃。通过访问列表,您可以访问所有用户并根据需要进行搜索。

建议使用Dictionary,因为您可以将用户ID作为关键字存储在上下文中。

希望它有帮助。

相关问题