public ICommunity GetByEmailAddress(string address)
    {
        var id = new UserIden {
            Email = address
        };

        return(ManageProvider.GetProxy <ICommunity>(id));
    }
Example #2
0
            /// <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);
            }
Example #3
0
        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));
        }
Example #4
0
 public IndexController(ManageProvider manageProvider)
 {
     ManageProvider = manageProvider;
 }
Example #5
0
        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));
        }