none
Selecionando Roles no novo usuário RRS feed

  • Pergunta

  • Bom dia, 

    Alguém que possa me ajudar, estou tentando colocar um DropDownList na Pagina Register.aspx, afim de que, ao registrar novo Usuário já selecione as Permissões (roles).

    Caso alguém puder me ajudar eu agradeceria.... 

    Valeu

    quarta-feira, 28 de novembro de 2012 11:06

Respostas

  • Eu acho que agora vai dar certo. Olha só como ficou o Register.aspx

    protected void Page_Load(object sender, EventArgs e)
            {
                RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"];
    
                //Crio uma role
                if (!Roles.RoleExists("Financeiro"))
                {
                    Roles.CreateRole("Financeiro");
                }
    
                //pega todas roles cadastradas
                var roles = Roles.GetAllRoles();
                DropDownList DDL = (DropDownList)FindControlRecursive(this.Page, "DropDownList1");
                //adiciona as roles no DropDrownList
                foreach (var item in roles)
                {
                    DDL.Items.Add(item);
                }
    
            }
    
            //procura o controle no form
            private Control FindControlRecursive(Control root, string id)
            {
                if (root.ID == id)
                {
                    return root;
                }
    
                foreach (Control c in root.Controls)
                {
                    Control t = FindControlRecursive(c, id);
                    if (t != null)
                    {
                        return t;
                    }
                }
    
                return null;
            }
    
    
            protected void RegisterUser_CreatedUser(object sender, EventArgs e)
            {
                //recupero nome do usuario
                TextBox TB = (TextBox)FindControlRecursive(this.Page, "UserName");
                //recupero qual foi a selecao no DropDownList
                DropDownList DDL = (DropDownList)FindControlRecursive(this.Page, "DropDownList1");
                //adiciono um usuario a uma role
                Roles.AddUserToRole(TB.Text, DDL.SelectedValue);
    
    
    
                FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);
                string continueUrl = RegisterUser.ContinueDestinationPageUrl;
                if (!OpenAuth.IsLocalUrl(continueUrl))
                {
                    continueUrl = "~/";
                }
                Response.Redirect(continueUrl);
            }

    Mais sobre  FindControlRecursive


    quarta-feira, 28 de novembro de 2012 15:06
    Moderador
  • Só alterei o método  RegisterUser_CreatedUser. Veja como ficou

    protected void RegisterUser_CreatedUser(object sender, EventArgs e)
            {
    
                //recupero nome do usuario
                TextBox TB = (TextBox)FindControlRecursive(this.Page, "UserName");
                //recupero o DropDownList
                DropDownList DDL = (DropDownList)FindControlRecursive(this.Page, "DropDownList1");
                //Recupero o Name do controle
                var nameControl = DDL.UniqueID;
                //Atraves do Name eu recupero valor no request
                var selecao = Request[nameControl];
                //adiciono um usuario a uma role
                Roles.AddUserToRole(TB.Text, selecao);
    
    
    
                FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);
                string continueUrl = RegisterUser.ContinueDestinationPageUrl;
                if (!OpenAuth.IsLocalUrl(continueUrl))
                {
                    continueUrl = "~/";
                }
                Response.Redirect(continueUrl);
            }

    Boa sorte!!!
    quinta-feira, 29 de novembro de 2012 19:35
    Moderador

Todas as Respostas

  • Bom dia,

    como você está fazendo seu sistema de cadastro?

    quarta-feira, 28 de novembro de 2012 11:34
    Moderador
  • Estou usando os forms padrões do webapplication...

    Só que fiz uma alteração, gostaria de colocar na pagina register.aspx um DDlist, assim, eu consigo cadastrar um novo usuário já atribuindo suas permissões.... 

    quarta-feira, 28 de novembro de 2012 11:40
  • Então você está utilizando MemberShip?

    quarta-feira, 28 de novembro de 2012 11:50
    Moderador
  • Eu inseri através do Template do CreateUserWizard a DropDownList, só que não aparece via código.....
    quarta-feira, 28 de novembro de 2012 11:53
  • Isso..estou utilizando Membership

    quarta-feira, 28 de novembro de 2012 11:56
  • tenta o seguinte

    protected void Page_Load(object sender, EventArgs e)
            {
                string[] roles = Roles.GetAllRoles();
    
                foreach (var item in roles)
                {
                    DropDownList1.Items.Add(item);
                }
            }
    using System.Web.Security



    quarta-feira, 28 de novembro de 2012 12:08
    Moderador
  • Blz... 

    Ele dá erro no DropDownList1...diz que não existe... ele tá inserido no aspx com content templete junto dos textbox....  

    quarta-feira, 28 de novembro de 2012 12:18
  • Que eu consiga.... ao selecionar a role como ele irá vincular o usuário com a role.... vou ter que dar um add na tabela aspnet_UserInRoles....? Aquela que não temos acesso??? 
    quarta-feira, 28 de novembro de 2012 12:20
  • Você adicionou um DropDownList com nome DropDownList1 na sua .aspx?
    quarta-feira, 28 de novembro de 2012 12:34
    Moderador
  • isso 

    <p>
                                    <asp:Label ID="Label1" runat="server" AssociatedControlID="ConfirmPassword">Escolha a Permissão:</asp:Label>
                                    <asp:DropDownList ID="DropDownList1" runat="server">
                                    </asp:DropDownList>
                                </p>

    este código esta logo abaixo de confirme a senha...

    quarta-feira, 28 de novembro de 2012 12:40
  • Então ele não está conseguindo preencher  DropDownList. Não acha o DropDownList no seu CodeBehind. posta seu código do aspx
    quarta-feira, 28 de novembro de 2012 13:01
    Moderador
  • é o padrão que vem no webapplication 

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
        <asp:CreateUserWizard ID="RegisterUser" runat="server" EnableViewState="False" OnCreatedUser="RegisterUser_CreatedUser"
            OnNextButtonClick="RegisterUser_CreatedUser">
            <LayoutTemplate>
                <asp:PlaceHolder ID="wizardStepPlaceholder" runat="server"></asp:PlaceHolder>
                <asp:PlaceHolder ID="navigationPlaceholder" runat="server"></asp:PlaceHolder>
            </LayoutTemplate>
            <WizardSteps>
                <asp:CreateUserWizardStep ID="RegisterUserWizardStep" runat="server">
                    <ContentTemplate>
                        <h2>
                            Create a New Account
                        </h2>
                        <p>
                            Use the form below to create a new account.
                        </p>
                        <p>
                            Passwords are required to be a minimum of
                            <%= Membership.MinRequiredPasswordLength %>
                            characters in length.
                        </p>
                        <span class="failureNotification">
                            <asp:Literal ID="ErrorMessage" runat="server"></asp:Literal>
                        </span>
                        <asp:ValidationSummary ID="RegisterUserValidationSummary" runat="server" CssClass="failureNotification"
                            ValidationGroup="RegisterUserValidationGroup" />
                        <div class="accountInfo">
                            <fieldset class="register">
                                <legend>Account Information</legend>
                                <p>
                                    <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
                                    <asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
                                    <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                                        CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."
                                        ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>
                                </p>
                                <p>
                                    <asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">E-mail:</asp:Label>
                                    <asp:TextBox ID="Email" runat="server" CssClass="textEntry"></asp:TextBox>
                                    <asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email"
                                        CssClass="failureNotification" ErrorMessage="E-mail is required." ToolTip="E-mail is required."
                                        ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>
                                </p>
                                <p>
                                    <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
                                    <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
                                    <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                                        CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."
                                        ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>
                                </p>
                                <p>
                                    <asp:Label ID="ConfirmPasswordLabel" runat="server" AssociatedControlID="ConfirmPassword">Confirm Password:</asp:Label>
                                    <asp:TextBox ID="ConfirmPassword" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
                                    <asp:RequiredFieldValidator ControlToValidate="ConfirmPassword" CssClass="failureNotification"
                                        Display="Dynamic" ErrorMessage="Confirm Password is required." ID="ConfirmPasswordRequired"
                                        runat="server" ToolTip="Confirm Password is required." ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>
                                    <asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password"
                                        ControlToValidate="ConfirmPassword" CssClass="failureNotification" Display="Dynamic"
                                        ErrorMessage="The Password and Confirmation Password must match." ValidationGroup="RegisterUserValidationGroup">*</asp:CompareValidator>
                                </p>
                                <p>
                                    <asp:Label ID="Label1" runat="server" AssociatedControlID="DropDownList1">Escolha a Permissão:</asp:Label>
                                    <asp:DropDownList ID="DropDownList1" runat="server" Width="326px">
                                    </asp:DropDownList>
                                </p>
                            </fieldset>
                            <p class="submitButton">
                                <asp:Button ID="CreateUserButton" runat="server" CommandName="MoveNext" Text="Create User"
                                    ValidationGroup="RegisterUserValidationGroup" />
                            </p>
                        </div>
                    </ContentTemplate>
                    <CustomNavigationTemplate>
                    </CustomNavigationTemplate>
                </asp:CreateUserWizardStep>
                <asp:CompleteWizardStep runat="server">
                    <ContentTemplate>
                        <table>
                            <tr>
                                <td align="center">
                                    Complete
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    Your account has been successfully created.
                                </td>
                            </tr>
                            <tr>
                                <td align="right">
                                    <asp:Button ID="ContinueButton" runat="server" CausesValidation="False" CommandName="Continue"
                                        Text="Continue" ValidationGroup="RegisterUser" />
                                </td>
                            </tr>
                        </table>
                    </ContentTemplate>
                </asp:CompleteWizardStep>
            </WizardSteps>
        </asp:CreateUserWizard>
    </asp:Content>


    quarta-feira, 28 de novembro de 2012 13:15
  • Eu acho que agora vai dar certo. Olha só como ficou o Register.aspx

    protected void Page_Load(object sender, EventArgs e)
            {
                RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"];
    
                //Crio uma role
                if (!Roles.RoleExists("Financeiro"))
                {
                    Roles.CreateRole("Financeiro");
                }
    
                //pega todas roles cadastradas
                var roles = Roles.GetAllRoles();
                DropDownList DDL = (DropDownList)FindControlRecursive(this.Page, "DropDownList1");
                //adiciona as roles no DropDrownList
                foreach (var item in roles)
                {
                    DDL.Items.Add(item);
                }
    
            }
    
            //procura o controle no form
            private Control FindControlRecursive(Control root, string id)
            {
                if (root.ID == id)
                {
                    return root;
                }
    
                foreach (Control c in root.Controls)
                {
                    Control t = FindControlRecursive(c, id);
                    if (t != null)
                    {
                        return t;
                    }
                }
    
                return null;
            }
    
    
            protected void RegisterUser_CreatedUser(object sender, EventArgs e)
            {
                //recupero nome do usuario
                TextBox TB = (TextBox)FindControlRecursive(this.Page, "UserName");
                //recupero qual foi a selecao no DropDownList
                DropDownList DDL = (DropDownList)FindControlRecursive(this.Page, "DropDownList1");
                //adiciono um usuario a uma role
                Roles.AddUserToRole(TB.Text, DDL.SelectedValue);
    
    
    
                FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);
                string continueUrl = RegisterUser.ContinueDestinationPageUrl;
                if (!OpenAuth.IsLocalUrl(continueUrl))
                {
                    continueUrl = "~/";
                }
                Response.Redirect(continueUrl);
            }

    Mais sobre  FindControlRecursive


    quarta-feira, 28 de novembro de 2012 15:06
    Moderador
  • Bom dia ... 

    Kra com alguns ajustes funcionou... só um porem ele sempre seleciona o primeiro item do DDL independente do que eu escolha... 

    quinta-feira, 29 de novembro de 2012 12:31
  • Só alterei o método  RegisterUser_CreatedUser. Veja como ficou

    protected void RegisterUser_CreatedUser(object sender, EventArgs e)
            {
    
                //recupero nome do usuario
                TextBox TB = (TextBox)FindControlRecursive(this.Page, "UserName");
                //recupero o DropDownList
                DropDownList DDL = (DropDownList)FindControlRecursive(this.Page, "DropDownList1");
                //Recupero o Name do controle
                var nameControl = DDL.UniqueID;
                //Atraves do Name eu recupero valor no request
                var selecao = Request[nameControl];
                //adiciono um usuario a uma role
                Roles.AddUserToRole(TB.Text, selecao);
    
    
    
                FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);
                string continueUrl = RegisterUser.ContinueDestinationPageUrl;
                if (!OpenAuth.IsLocalUrl(continueUrl))
                {
                    continueUrl = "~/";
                }
                Response.Redirect(continueUrl);
            }

    Boa sorte!!!
    quinta-feira, 29 de novembro de 2012 19:35
    Moderador