使用Identity 2.0在Web表单中进行基于角色的安全授权

时间:2015-03-03 19:02:13

标签: c# asp.net webforms asp.net-identity asp.net-identity-2

我已经看过不是百元而是数以千计的例子从头开始用MVC身份2.0完成的例子已经完成但是没有一个带有血腥网页形式的例子和存在的那些甚至不值得而只是非常基本的。 我正在开发一个应用程序,我有三个角色,user,admin,superUser,所有这些都在AspNetRoles表中,因为我使用的是identity 2.0。现在,当我创建用户时,我也为该用户分配了这些角色之一。 在我担任桌面应用程序之前,我已经开始使用自定义角色系统。 所以我在这里尝试了CodeProject上编写的关于表单身份验证的所有链接和文章以及我们在web.config中可以做的所有内容,但没有任何帮助 请看一下这个屏幕截图http://prntscr.com/6ca09i你可能会对我的意思有所了解。 寄存器上的C#代码是

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        //owin entity
        var userStore = new UserStore<IdentityUser>();
        userStore.Context.Database.Connection.ConnectionString =
            System.Configuration.ConfigurationManager
            .ConnectionStrings["GCR"].ConnectionString;

        var manager = new UserManager<IdentityUser>(userStore);
        //string  userInfor;// = new UserInformation();

        // check if the url contains an id perameter
        if (!String.IsNullOrWhiteSpace(Request.QueryString["id"]))
        {
            var id = Convert.ToInt32(Request.QueryString["id"]);
            var userInfo = new UserInformation
            {
                Email = txtEmail.Text,
                FirstName = txtFirstName.Text,
                LastName = txtLastName.Text,
                AddressLine1 = txtAddressLine1.Text,
                AddressLine2 = txtAddressLine2.Text,
                City = txtCity.Text,
                State = ddlState.SelectedValue,
                ZipCode = Convert.ToInt32(txtZip.Text),
                PhoneNumber = txtPhone.Text,
                RoleId = Convert.ToInt32(ddlRole.SelectedValue)

这是我的注册页面,我指定的角色实际上没有被分配http://prntscr.com/6ca1xi

现在请告诉我如何创建基于角色的应用程序,在单个文件夹中我们有不同的文件,具有不同角色的用户可以访问 我已经浪费了两天的身份,我没有浪费更多的时间在上面

2 个答案:

答案 0 :(得分:1)

我从aspnetroles表中获得了角色,这就是我得到的那些

var context = new ApplicationDbContext();
var roleStore = new RoleStore<IdentityRole>(context);
var roleMgr = new RoleManager<IdentityRole>(roleStore);

if (User.IsInRole("admin"))
{
    //come here
}

答案 1 :(得分:1)

这就是你如何妥善处理这个

        var userInfo = new UserInformation
        {
            Email = txtEmail.Text,
            FirstName = txtFirstName.Text,
            LastName = txtLastName.Text,
            AddressLine1 = txtAddressLine1.Text,
            AddressLine2 = txtAddressLine2.Text,
            City = txtCity.Text,
            State = ddlState.SelectedValue,
            ZipCode = Convert.ToInt32(txtZip.Text),
            PhoneNumber = txtPhone.Text,
            RoleId = ddlRole.SelectedValue

你的角色应该是一些文本值,因为它不会将角色视为id  将此对象或模型保存在`db.saveChanges()之后;  你最终会把这个角色添加到aspnetroles表中,你将如何做到这一点非常简单只需一行

 // add role to the user which is created right now 
  manager.AddToRole(userInfo.GUID, ddlRole.Text.Trim());

第一个参数是用户的id,第二个参数是您选择用户角色的下拉列表,您也可以在其中执行该角色。现在你要如何检查这一页加载非常简单 就像这样

#region page load
            if (!IsPostBack)
            {
                if (User.IsInRole("admin") || User.IsInRole("superuser"))
                {

                }
                else
                {
                    string unAuthorizedRedirect = WebConfigurationManager.AppSettings["UnAuthorizedRedirect"];
                    Response.Redirect("~/" + unAuthorizedRedirect);
                }
            }
            #endregion

我希望这能完全帮助你