我正在为 GUI 编写授权框架。用户使用有效凭据登录,并显示用户有权访问的菜单选项(按钮)。
我计划根据分配给用户的权限显示或隐藏按钮可见性。
我正在努力思考以编程方式引用和切换按钮可见性的最佳方法。我有一个列表,其中详细说明了哪些菜单项应该可见或不可见,但我不知道如何针对表单上的按钮引用该列表。
我可以轻松地键入每个按钮对象的名称并针对列表进行测试并切换按钮的可见性,但这对我来说似乎不是很有效。
代码如下。我怎样才能最好地启用/禁用按钮项?
class Menu
{
public int Id { get; set; }
public string MenuItemFriendlyName { get; set; }
public string ButtonName { get; set; }
public bool Visable { get; set; }
public List<Menu> CalculateMenuAccessForUser(User userDetails)
{
var menuItems = AllMenuItemsInSystem();
foreach (var pt in userDetails.PermissionTable)
{
if(pt.Type != "Menu")
break;
if (menuItems.Exists(x => x.Id.Equals(pt.Id)))
{
var index = menuItems.FindIndex(y => y.Id.Equals(pt.Id));
menuItems[index].Visable = true;
}
}
return menuItems;
}
private List<Menu> AllMenuItemsInSystem()
{
var menu = new List<Menu>();
using (var sqlconnection = new SqlConnection(Globals.AFWideSettings.SqlConnectionString))
{
sqlconnection.Open();
using (
var sqlcommand =
new SqlCommand("select name, permissionid from PermissionListTable where type = 'Menu'",
sqlconnection))
{
var resultReader = sqlcommand.ExecuteReader();
while (resultReader.Read())
{
menu.Add(new Menu(){MenuItemFriendlyName = resultReader.GetString(0), Id = resultReader.GetInt32(1), Visable = false});
}
}
}
return menu;
}
}
class Another{
void BuildOutlookMenu()
{
var buildMenu = new Authentication.Menu();
var menuBuilder = buildMenu.CalculateMenuAccessForUser(_userDetails);
foreach (var menu in menuBuilder)
{
if (menu.Visable)
{
//Here I wish to enable or disable my menu buttons
//BUTTON.Visibility = Visibility.Visible;
}
}
}
}