C# 从UI存储Loggedin用户详细信息并在BL方法中使用

C# 从UI存储Loggedin用户详细信息并在BL方法中使用,c#,security,singleton,C#,Security,Singleton,我在一个文档管理系统中工作。数据库中定义的用户可以根据定义的访问权限创建/操作自己的文档。文档的所有者可以让其他用户访问/修改文档(存储为XML内容)。每当打开文档进行编辑时,我需要自动调整LoggedIn用户的大小。该文档已由CreatedBy、EditingUser属性创建 如果用户“a”拥有文档的写入权限,则用户“B”可能会编辑用户“a”拥有的文档。现在我需要检查LoggedIn用户对打开进行编辑的文档的授权(在DocumentManager对象的Save()BL方法中)。在这里,我需要访

我在一个文档管理系统中工作。数据库中定义的用户可以根据定义的访问权限创建/操作自己的文档。文档的所有者可以让其他用户访问/修改文档(存储为XML内容)。每当打开文档进行编辑时,我需要自动调整LoggedIn用户的大小。该文档已由CreatedBy、EditingUser属性创建

如果用户“a”拥有文档的写入权限,则用户“B”可能会编辑用户“a”拥有的文档。现在我需要检查LoggedIn用户对打开进行编辑的文档的授权(在DocumentManager对象的Save()BL方法中)。在这里,我需要访问BL方法中的LoggedIn用户详细信息,该信息在登录过程后填写(之后不应更改)


我的应用程序是WPF应用程序。那么,处理这种情况的最佳方法是什么呢。我需要经常针对我的应用程序中的文档检查Loggedin用户的最右边(特别是在BL方法中)。

您需要采用会话方法。您需要维护一个静态类,如下所示。当任何用户登录时,您都需要将其添加到BLL上的列表中

public static class Session{
     public static Dictionary<User, DateTime> loggedInUser;    
     public static Add(User user){
         loggedInUser.Add(user, DateTime.Now);
         // raise event user arrival
     }

     public static GetUser(int Id){
         // fetch user;
     }

     public static Remove(User user){
        loggedInUser.Removed(user);
        // raise event user left
     }

     // TODO: add timer to check itself. If not activity done in past n minutes, 
     //log him out
}
公共静态类会话{
公共静态字典loggedInUser;
公共静态添加(用户){
添加(user,DateTime.Now);
//引发事件用户到达
}
公共静态GetUser(int-Id){
//获取用户;
}
公共静态删除(用户){
loggedInUser.Removed(用户);
//向左引发事件用户
}
//TODO:添加计时器以检查自身。如果不是在过去n分钟内完成的活动,
//把他注销
}

您需要采取会话方法。您需要维护一个静态类,如下所示。当任何用户登录时,您都需要将其添加到BLL上的列表中

public static class Session{
     public static Dictionary<User, DateTime> loggedInUser;    
     public static Add(User user){
         loggedInUser.Add(user, DateTime.Now);
         // raise event user arrival
     }

     public static GetUser(int Id){
         // fetch user;
     }

     public static Remove(User user){
        loggedInUser.Removed(user);
        // raise event user left
     }

     // TODO: add timer to check itself. If not activity done in past n minutes, 
     //log him out
}
公共静态类会话{
公共静态字典loggedInUser;
公共静态添加(用户){
添加(user,DateTime.Now);
//引发事件用户到达
}
公共静态GetUser(int-Id){
//获取用户;
}
公共静态删除(用户){
loggedInUser.Removed(用户);
//向左引发事件用户
}
//TODO:添加计时器以检查自身。如果不是在过去n分钟内完成的活动,
//把他注销
}

我宁愿建议一种解耦机制来授权用户。因此,实际应用不需要担心授权问题

您可以使用策略XACML定义授权逻辑

XACML是事实上的授权标准

一旦在XACML PDP中定义了授权逻辑—在执行用户操作之前,应用程序将调用XACML PDP—并询问登录用户是否有资格对给定资源执行此操作

使用XACML将使您能够灵活地更改授权逻辑,甚至不必触及应用程序逻辑


另外,您可以使用XACML定义非常细粒度的规则。

我更愿意建议一种解耦机制来授权用户。因此,实际应用不需要担心授权问题

您可以使用策略XACML定义授权逻辑

XACML是事实上的授权标准

一旦在XACML PDP中定义了授权逻辑—在执行用户操作之前,应用程序将调用XACML PDP—并询问登录用户是否有资格对给定资源执行此操作

使用XACML将使您能够灵活地更改授权逻辑,甚至不必触及应用程序逻辑

此外,您还可以使用XACML定义非常细粒度的规则