Могу ли я загрузить атрибут «Роли»программно? - PullRequest
4 голосов
/ 24 февраля 2011

Я поддерживаю приложение ASP.NET, и сейчас безопасность определяется в разных местах сайта.В коде есть некоторая логика, такая как if User.IsInRole(...), и есть другая логика, разбросанная по страницам ASPX, например:

<asp:LoginView ID="lvDoSomeStuff" runat="server">
    <RoleGroups>
        <asp:RoleGroup Roles="Accounting,HR,Blah">
        ...
    </RoleGroups>
</asp:LoginView>

По мере поступления новых запросов к функциям и создания новых ролей, явынужден пройти через все приложение и убедиться, что я не пропустил ни одной области.Я бы хотел избежать этого в будущем.

Как программно установить атрибут Roles элемента <asp:RoleGroup>?Я пытался сделать что-то вроде этого:

<asp:LoginView ID="lvDoSomeStuff" runat="server">
    <RoleGroups>
        <asp:RoleGroup Roles="<%= UserManager.GetRolesThatCanDoX() %>">
        ...
    </RoleGroups>
</asp:LoginView>

, где GetRolesThatCanDoX() возвращает разделенный запятыми список имен ролей, но мой метод, кажется, никогда не вызывается.

Возможно ли этосделать что-то подобное в ASP.NET WebForms?Пожалуйста, помогите мне отделить мой код!; -)

Решение: Ответ фантомиста сработал отлично.Моя реализация этого была следующей:

ASPX:

<asp:LoginView ID="lvDoSomeStuff" runat="server">
    <RoleGroups>
        <asp:RoleGroup>
        ...
        </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>

Кодовый код:

protected void Page_Load(object sender, EventArgs e)
{
    // Load rolegroups from UserManager
    lvDoSomeStuff.RoleGroups[0].Roles = UserManager.GetRolesThatCanDoStuff().ToArray();
    lvDoSomeOtherStuff.RoleGroups[0].Roles = UserManager.GetRolesThatCanDoOtherStuff().ToArray();
}

1 Ответ

6 голосов
/ 24 февраля 2011

Вы пробовали что-то подобное ...

Код:

protected void Page_Load(Object sender, EventArgs e)
{
    RoleGroup rg = new RoleGroup();
    rg.ContentTemplate = new CustomTemplate();
    String[] RoleList = {"users"};
    rg.Roles = RoleList;
    RoleGroupCollection rgc = LoginView1.RoleGroups;
    rgc.Add(rg);

}

Дизайнер:

<asp:LoginView id="LoginView1" runat="server">
     <AnonymousTemplate>
         You are not logged in.<br />
         <asp:LoginStatus id="LoginStatus1" runat="server"></asp:LoginStatus>
     </AnonymousTemplate>
     <LoggedInTemplate>
          You are logged in as
          <asp:LoginName id="LoginName1" runat="server" />. This message is not from the template.<br />
          <asp:LoginStatus id="Loginstatus2" runat="server"></asp:LoginStatus>
     </LoggedInTemplate>
</asp:LoginView>
...