C#写一段根据权限管理控制每个菜单显示的代码
时间: 2024-12-19 11:26:03 浏览: 10
在C#中,我们可以创建一个权限管理系统来控制菜单的显示。这个系统通常涉及到角色(Role)和用户(User)关联,并在需要的地方检查用户的权限。下面是一个简单的例子,使用LINQ查询和属性访问:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class MenuItem
{
public string Name { get; set; }
[Authorize(Roles = "Admin, Manager")] // 只有管理员和经理可以访问此菜单
public bool IsVisible { get; set; } = true;
}
public class User
{
public string Username { get; set; }
public List<string> Roles { get; set; } = new List<string>();
}
public class AuthorizationService
{
private readonly IDictionary<string, Func<User, bool>> _menuAccessRules;
public AuthorizationService(IEnumerable<MenuItem> menus)
{
_menuAccessRules = menus.ToDictionary(menu => menu.Name, menu => user => CheckUserRoles(user, menu.Roles));
}
private bool CheckUserRoles(User user, IEnumerable<string> requiredRoles)
{
return user.Roles.Intersect(requiredRoles).Any();
}
public bool CanSeeMenu(string/menuName, User user)
{
return _menuAccessRules.TryGetValue(menuName, out var isAccessible) && isAccessible(user);
}
}
// 使用示例
public void DisplayMenus(User currentUser)
{
var authorizationService = new AuthorizationService(GetAllMenuItems());
foreach (var menuItem in GetAllMenuItems())
{
if (authorizationService.CanSeeMenu(menuItem.Name, currentUser))
{
Console.WriteLine($"'{menuItem.Name}' is visible to {currentUser.Username}");
}
else
{
Console.WriteLine($"{menuItem.Name} is not visible");
}
}
}
```
在这个示例中,`MenuItem`类有一个`IsVisible`属性,它的访问权限由`Authorize`特性控制。`AuthorizationService`负责处理实际的权限检查,通过用户的角色列表来判断他们是否有查看特定菜单的权限。
阅读全文