创建可在应用程序范围内访问的用户配置文件

本文关键字:用户 配置文件 访问 范围内 应用程序 创建 | 更新日期: 2023-09-27 18:35:24

我正在实现一个非常基本的登录系统,实际上并没有使用任何开箱即用的登录控件。我的数据库包含以下表:

用户

配置文件:包含用户
的详细信息用户安全角色:包含每个用户的安全角色

在我的 asp.net 应用程序中,我使用以下代码登录用户:

protected void Logon_Click(object sender, EventArgs e)
        {
            if (_BLSecurity.verifyUser(UserName.Text, UserPass.Text))
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Msg.Text = "Invalid credentials. Please try again.";
            }
        }

验证用户后,我需要将用户配置文件和用户安全角色中包含的有关他的信息存储在我的 Web 应用程序中,以便我可以从我拥有的每个表单访问此数据并基于它设置权限。

任何想法我该如何执行此操作?

创建可在应用程序范围内访问的用户配置文件

您可以

为示例创建自定义类SessionContext其中您将在登录时保存所有需要的数据。之后,您可以创建每个 UI.Page 继承的类。在此类中,您将拥有SessionContext属性。

    public SessionContext USession
    {
        get
        {
            if (base.Session["_USRSESS"] != null)
                return (BO.SessionContext)base.Session[_USRSESS];
            return null;
        }
        set
        {
            base.Session["_USRSESS"] = value;
        }
    }

当您需要此用户数据时,您将在每个页面中调用此属性。在此处保存一个自定义类将有可能将您想要的所有内容放在会话中,而无需记住多个会话变量。

编辑:

如果您有基本页面类

public class BasicPage : System.Web.UI.Page 
{
    public SessionContext USession
    {
        get
        {
            if (base.Session["_USRSESS"] != null)
                return (BO.SessionContext)base.Session[_USRSESS];
            return null;
        }
        set
        {
            base.Session["_USRSESS"] = value;
        }
    }
}
public partial class _Default : BasicPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

看到 aspx.pages 继承BasicPageBasicPage继承UI.Page

当您重定向到默认页面时,您将需要类似的东西:

            SessionContext resSession = new SessionContext();
            // I'm giving you example with standard bool property. You can put class property if you want.
            resSession.IsAdmin = Convert.ToInt32(userRow["IsAdmin"]) == 1;
            // this is Guid property for the User primary key, if you are using integer for primary key the property should be int.
            resSession.UserID = (Guid)userRow["ID"];
            BasicPage page = this.Page as BasicPage;
            page.UserSession = session;
            Response.Redirect("../Default.aspx");

您可以将用户配置文件数据存储在会话中。每个用户都有一个与他相关联的唯一会话。

protected void Logon_Click(object sender, EventArgs e)
{
    if (_BLSecurity.VerifyUser(UserName.Text, UserPass.Text))
    {
        Session["currentUserProfile"] = GetUserProfile();
        Response.Redirect("../Default.aspx");
    }
    else
    {
        Msg.Text = "Invalid credentials. Please try again.";
    }
}

然后,每当需要用户配置文件对象时,都可以使用当前用户配置文件密钥从会话中获取它。

var userProfile = (UserProfile)Session["currentUserProfile"];