using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Infrastructure; using Infrastructure.Extensions; using OpenAuth.App.Base; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.BasicQueryService; using OpenAuth.App.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; using StackExchange.Redis; namespace OpenAuth.App { /// /// 普通用户授权策略 /// public class NormalAuthStrategy : SqlSugarBaseApp, IAuthStrategy { ISqlSugarClient client; UserManager manager; protected SysUser _user; private List _userRoleIds; //用户角色ID public NormalAuthStrategy( ISugarUnitOfWork unitWork, ISimpleClient repository, UserManager userManager ) : base(unitWork, repository, null) { client = base.Repository.AsSugarClient(); manager = userManager; } public List Modules { get { //var moduleIds = Repository.ChangeRepository>().GetList( // u => // (_userRoleIds.Contains(u.RoleId))).Select(u => u.ModuleId); //var modules = Repository.ChangeRepository>().AsQueryable().Where(u => moduleIds.Contains(u.Id)) // .Select(module => new ModuleView // { // SortNo = module.SortNo, // Name = module.Name, // Code = module.Code, // CascadeId = module.CascadeId, // Id = module.Id, // IconName = module.IconName, // Url = module.Url, // ParentId = module.ParentId, // ParentName = module.ParentName, // IsSys = module.IsSys, // Status = module.Status // }).ToList(); var modules = manager.RoleModules(_userRoleIds).Distinct().OrderBy((r, m) => m.SortNo).Select().ToList(); var usermoduleelements = ModuleElements; foreach (var module in modules) { module.Elements = usermoduleelements.Where(u => u.ModuleId == module.Id).DistinctBy(u=>u.Id).ToList(); } return modules; } } public List ModuleElements { get { return manager.RoleModuleElements(_userRoleIds).OrderBy((r, m) => m.Sort).Select((r, m) => m).ToList(); } } public List Roles { get { return manager.UserRoles(_user.Id).Select((u, r) => r).ToList(); } } public List Resources { get { var resourceIds = base.Repository.ChangeRepository>() .GetList(u => _userRoleIds.Contains(u.RoleId)).Select(u => u.ResourceId); return base.Repository.ChangeRepository>().GetList(u => resourceIds.Contains(u.Id)).ToList(); } } public List Orgs { get { return manager.UserOrgs(_user.Id).Select((u, o) => o).ToList(); } } public List Positions { get { return manager.UserPositons(_user.Id).Select((u, p) => p).ToList(); } } public SysUser User { get { return _user; } set { _user = value; _userRoleIds = manager.UserRoles(_user.Id).Select((u, r) => r.Id).ToList(); } } } }