Я поддерживаю приложение 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();
}