using MongoDB.Driver; using System.Collections.Generic; using System.Linq; namespace Bootstrap.Client.DataAccess.MongoDB { /// /// /// public class Role : DataAccess.Role { /// /// 此角色关联的所有菜单 /// public IEnumerable Menus { get; set; } /// /// 此角色关联的所有应用程序 /// public IEnumerable Apps { get; set; } /// /// 获得/设置 角色主键ID /// public string Id { get; set; } /// /// 获得/设置 角色名称 /// public string RoleName { get; set; } /// /// 获得/设置 角色描述 /// public string Description { get; set; } /// /// /// /// /// public override IEnumerable RetrievesByUserName(string userName) { var roles = new List(); var user = UserHelper.Retrieves().Cast().FirstOrDefault(u => u.UserName.ToLowerInvariant() == userName.ToLowerInvariant()); if (user != null) { var role = RoleHelper.Retrieves(); roles.AddRange(role.Where(r => user.Roles.Any(rl => rl == r.Id)).Select(r => r.RoleName)); if (roles.Count == 0) roles.Add("Default"); } return roles; } /// /// 根据菜单url查询某个所拥有的角色 /// 从NavigatorRole表查 /// 从Navigators -> GroupNavigatorRole -> Role查查询某个用户所拥有的角色 /// /// public override IEnumerable RetrievesByUrl(string url) { var menu = DbManager.Menus.Find(md => md.Url.StartsWith(url)).FirstOrDefault(); var ret = RoleHelper.Retrieves().Cast().Where(md => md.Menus != null && md.Menus.Contains(menu.Id)).Select(m => m.RoleName).ToList(); if (!ret.Contains("Administrators")) ret.Add("Administrators"); return ret; } } }