public ICommunity GetByEmailAddress(string address) { var id = new UserIden { Email = address }; return(ManageProvider.GetProxy <ICommunity>(id)); }
/// <summary>扫描命名空间下的控制器并添加为菜单</summary> /// <param name="rootName">根菜单名称,所有菜单附属在其下</param> /// <param name="asm">要扫描的程序集</param> /// <param name="nameSpace">要扫描的命名空间</param> /// <returns></returns> public virtual IList <IMenu> ScanController(String rootName, Assembly asm, String nameSpace) { var list = new List <IMenu>(); var mf = this as IMenuFactory; // 所有控制器 var types = asm.GetTypes().Where(e => e.Name.EndsWith("Controller") && e.Namespace == nameSpace).ToList(); if (types.Count == 0) { return(list); } // 如果根菜单不存在,则添加 var r = Root as IMenu; var root = mf.FindByFullName(nameSpace); if (root == null) { root = r.FindByPath(rootName); } //if (root == null) root = r.Childs.FirstOrDefault(e => e.Name.EqualIgnoreCase(rootName)); //if (root == null) root = r.Childs.FirstOrDefault(e => e.Url.EqualIgnoreCase("~/" + rootName)); if (root == null) { root = r.Add(rootName, null, nameSpace, "~/" + rootName); list.Add(root); } if (root.FullName != nameSpace) { root.FullName = nameSpace; (root as IEntity).Save(); } var ms = new List <IMenu>(); // 遍历该程序集所有类型 foreach (var type in types) { var name = type.Name.TrimEnd("Controller"); var url = root.Url; var node = root; // 添加Controller var controller = node.FindByPath(name); if (controller == null) { url += "/" + name; controller = FindByUrl(url); if (controller == null) { // DisplayName特性作为中文名 controller = node.Add(name, type.GetDisplayName(), type.FullName, url); //list.Add(controller); } } if (controller.FullName.IsNullOrEmpty()) { controller.FullName = type.FullName; } if (controller.Remark.IsNullOrEmpty()) { controller.Remark = type.GetDescription(); } ms.Add(controller); list.Add(controller); // 反射调用控制器的方法来获取动作 var func = type.GetMethodEx("ScanActionMenu"); if (func == null) { continue; } // 由于控制器使用IOC,无法直接实例化控制器,需要给各个参数传入空 var ctor = type.GetConstructors()?.FirstOrDefault(); var ctrl = ctor.Invoke(new Object[ctor.GetParameters().Length]); //var ctrl = type.CreateInstance(); var acts = func.As <Func <IMenu, IDictionary <MethodInfo, Int32> > >(ctrl).Invoke(controller); if (acts == null || acts.Count == 0) { continue; } // 可选权限子项 controller.Permissions.Clear(); // 添加该类型下的所有Action作为可选权限子项 foreach (var item in acts) { var method = item.Key; var dn = method.GetDisplayName(); if (!dn.IsNullOrEmpty()) { dn = dn.Replace("{type}", (controller as Menu)?.FriendName); } var pmName = !dn.IsNullOrEmpty() ? dn : method.Name; if (item.Value <= (Int32)PermissionFlags.Delete) { pmName = ((PermissionFlags)item.Value).GetDescription(); } controller.Permissions[item.Value] = pmName; } // 排序 if (controller.Sort == 0) { var pi = type.GetPropertyEx("MenuOrder"); if (pi != null) { controller.Sort = pi.GetValue(null).ToInt(); } } } for (var i = 0; i < ms.Count; i++) { (ms[i] as IEntity).Save(); } // 如果新增了菜单,需要检查权限 if (list.Count > 0) { ThreadPoolX.QueueUserWorkItem(() => { XTrace.WriteLine("新增了菜单,需要检查权限"); var fact = ManageProvider.GetFactory <IRole>(); fact.EntityType.Invoke("CheckRole"); }); } return(list); }
static AreaRegistrationBase() { // 预热XCode Task.Run(() => ManageProvider.Init()); XTrace.WriteLine("{0} Start 初始化魔方 {0}", new String('=', 32)); Assembly.GetExecutingAssembly().WriteVersion(); // 遍历所有引用了AreaRegistrationBase的程序集 var list = new List <PrecompiledViewAssembly>(); foreach (var asm in FindAllArea()) { XTrace.WriteLine("注册区域视图程序集:{0}", asm.FullName); var pva = new PrecompiledViewAssembly(asm); list.Add(pva); } PrecompiledEngines = list.ToArray(); var engine = new CompositePrecompiledMvcEngine(PrecompiledEngines); XTrace.WriteLine("注册复合预编译引擎,共有视图程序集{0}个", list.Count); //ViewEngines.Engines.Insert(0, engine); // 预编译引擎滞后,让其它引擎先工作 ViewEngines.Engines.Add(engine); // StartPage lookups are done by WebPages. VirtualPathFactoryManager.RegisterVirtualPathFactory(engine); // 注册绑定提供者 EntityModelBinderProvider.Register(); // 注册过滤器 XTrace.WriteLine("注册过滤器:{0}", typeof(MvcHandleErrorAttribute).FullName); XTrace.WriteLine("注册过滤器:{0}", typeof(EntityAuthorizeAttribute).FullName); var filters = GlobalFilters.Filters; filters.Add(new MvcHandleErrorAttribute()); filters.Add(new EntityAuthorizeAttribute() { IsGlobal = true }); // 从数据库或者资源文件加载模版页面的例子 //HostingEnvironment.RegisterVirtualPathProvider(new ViewPathProvider()); //var routes = RouteTable.Routes; //routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //routes.MapRoute( // name: "Virtual", // url: "{*viewName}", // defaults: new { controller = "Frontend", action = "Default" }, // constraints: new { controller = "Frontend", action = "Default" } //); // 自动检查并下载魔方资源 Task.Factory.StartNew(CheckContent, TaskCreationOptions.LongRunning).LogException(); XTrace.WriteLine("{0} End 初始化魔方 {0}", new String('=', 32)); }
public IndexController(ManageProvider manageProvider) { ManageProvider = manageProvider; }
public ActionResult MyLogin() { string Msg = ""; string Name = Request["name"] ?? ""; string strcode = Request["strcode"] ?? ""; string pwd = Request["pwd"] ?? ""; string sessioncode = (Session["MyCode"] ?? "").ToString(); Session["MyCode"] = null; if (sessioncode == "" || strcode != sessioncode) { return(Content("验证码错误!")); } ManageUser user = new ManageUser(); if (Name == "admin" && pwd == "123") { Msg = "success"; user.IsSystem = true; user.RoleId = 0; user.RoleName = "超级管理员"; } else { var temp = UserInfoBLL.GetList(o => o.Name == Name).FirstOrDefault(); if (temp == null) { Msg = "该用户不存在!"; return(Content(Msg)); } else { var myuser = UserInfoBLL.GetList(o => o.Name == Name && o.Pwd == pwd).FirstOrDefault(); if (myuser == null) { Msg = "密码错误!"; return(Content(Msg)); } Msg = "success"; var role = (from r in myuser.RoleInfo select r).FirstOrDefault(); //string UserLoginid = Guid.NewGuid().ToString(); //new CacheHelper().AddCache(UserLoginid, temp, DateTime.Now.AddMinutes(20)); //Response.Cookies["user"].Value = UserLoginid; user.UserId = temp.ID; user.UserName = temp.Name; if (role != null) { user.RoleId = role.ID; user.RoleName = role.RoleName; } user.IsSystem = false; } } IManageProvider UserManage = new ManageProvider(); UserManage.AddCurrent(user); return(Content(Msg)); }