Пример #1
0
 public AccessItem(IdentityType identityType, int identityId, AccessType data)
 {
     IdentityType    = identityType;
     Access          = data;
     this.identityId = identityId;
     this.identity   = null;
 }
Пример #2
0
        /// <summary>
        /// 메뉴중 사용자가 권한이 있는 루트메뉴목록
        /// </summary>
        /// <param name="productId">제품Id</param>
        /// <param name="identity">요청자 정보</param>
        /// <returns>메뉴목록</returns>
        public override IEnumerable <MenuItem> GetRootMenu(string productId, IAccessIdentity identity)
        {
            if (IsDebugEnabled)
            {
                log.Debug("==>> S productId={0}, identity={1}", productId, identity);
            }

            productId.ShouldNotBeWhiteSpace("값이 없습니다.");
            //identity.ShouldNotBeNull("사용자 정보가 없습니다.");

            if (identity == null)
            {
                return(null);
            }

            var provider = SiteMap.Providers[productId];

            if (IsDebugEnabled)
            {
                log.Debug("productId={0}, identity={1}, provider={2}", productId, identity, provider);
            }

            var menus = new List <MenuItem>();

            if (provider != null)
            {
                if (IsDebugEnabled)
                {
                    log.Debug("provider.RootNode={0}", provider.RootNode);
                }

                if (provider.RootNode != null)
                {
                    var nodes = GetAuthMenus(provider.RootNode.ChildNodes, identity);

                    foreach (SiteMapNode node in nodes)
                    {
                        var menu = new MenuItem(node.Title, node.Title, node.Url);
                        menu.NodePosition.Level = 0;
                        menu.NodePosition.Order = 0;
                        menu.Parent             = null;
                        AddNode(node, menu, 1);
                        menus.Add(menu);
                    }
                }
            }
            if (IsDebugEnabled)
            {
                log.Debug("==>> E menus={0}", menus.CollectionToString());
            }

            return(menus);
        }
Пример #3
0
            /// <summary>
            /// Current를 셋팅한다.
            /// </summary>
            /// <param name="identity"></param>
            public static void SetCurrent(IAccessIdentity identity)
            {
                if(log.IsDebugEnabled)
                    log.Debug("접속정보를 할당합니다. identity=[{0}]", identity);

                identity.ShouldNotBeNull("identity");

                Identity = identity;

                ThemeName = WebAppTool.LoadValue(AppSettings.ApplicationName + @"_" + CurrentThemeKey, AppSettings.DefaultThemeAssemblyName);

                var principal = Services.Authentication.CreatePrincipal(Services.Authentication.Identity);
                if(Local.IsInWebContext)
                    HttpContext.Current.User = principal;
                Thread.CurrentPrincipal = principal;
            }
Пример #4
0
        /// <summary>
        /// 메뉴정보를 반환한다.
        /// </summary>
        /// <param name="productId">제품Id</param>
        /// <param name="identity">요청자 정보</param>
        /// <param name="menuId">메뉴Id</param>
        /// <returns>메뉴</returns>
        public override MenuItem FindOneMenu(string productId, IAccessIdentity identity, string menuId)
        {
            if (IsDebugEnabled)
            {
                log.Debug("==>> S productId={0}, identity={1}, menuId={2}", productId, identity, menuId);
            }

            productId.ShouldNotBeWhiteSpace("값이 없습니다.");
            //identity.ShouldNotBeNull("사용자 정보가 없습니다.");
            menuId.ShouldNotBeWhiteSpace("값이 없습니다.");

            if (identity == null)
            {
                return(null);
            }

            var provider = SiteMap.Providers[productId];

            if (provider != null)
            {
                if (IsDebugEnabled)
                {
                    log.Debug("provider.RootNode={0}", provider.RootNode);
                }

                if (provider.RootNode != null)
                {
                    var nodes = GetAuthMenus(provider.RootNode.GetAllNodes(), identity);
                    var node  = nodes.ToList <SiteMapNode>().FirstOrDefault(nd => nd.Title == menuId);
                    if (node != null)
                    {
                        var menu = new MenuItem(node.Title, node.Title, node.Url)
                        {
                            NodePosition =
                            {
                                Level = 0,
                                Order = 0
                            }
                        };
                        SetParent(node, menu);

                        return(menu);
                    }
                }
            }
            return(null);
        }
Пример #5
0
        /// <summary>
        /// 제품메뉴중 사용자가 권한이 있는 메뉴목록
        /// </summary>
        /// <param name="productId">제품Id</param>
        /// <param name="identity">요청자 정보</param>
        /// <returns>메뉴목록</returns>
        public override IEnumerable<MenuItem> FindAllMenuByProduct(string productId, IAccessIdentity identity)
        {
            if(IsDebugEnabled)
                log.Debug("==>> S productId={0}, identity={1}", productId, identity);

            productId.ShouldNotBeWhiteSpace("값이 없습니다.");
            //identity.ShouldNotBeNull("사용자 정보가 없습니다.");

            if(identity == null)
                return null;

            var provider = SiteMap.Providers[productId];

            if(IsDebugEnabled)
                log.Debug("productId={0}, identity={1}, provider={2}", productId, identity, provider);

            var menus = new List<MenuItem>();

            if(provider != null)
            {
                if(IsDebugEnabled)
                    log.Debug("provider.RootNode={0}", provider.RootNode);

                if(provider.RootNode != null)
                {
                    var nodes = GetAuthMenus(provider.RootNode.GetAllNodes(), identity);

                    foreach(SiteMapNode node in nodes)
                    {
                        var menu = new MenuItem(node.Title, node.Title, node.Url);
                        menu.NodePosition.Level = 0;
                        menu.NodePosition.Order = 0;
                        menu.Parent = null;
                        //AddNode(node, menu, 1);
                        menus.Add(menu);
                    }
                }
            }
            if(IsDebugEnabled)
                log.Debug("==>> E menus={0}", menus.CollectionToString());

            return menus;
        }
Пример #6
0
            /// <summary>
            /// Current를 셋팅한다.
            /// </summary>
            /// <param name="identity"></param>
            public static void SetCurrent(IAccessIdentity identity)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("접속정보를 할당합니다. identity=[{0}]", identity);
                }

                identity.ShouldNotBeNull("identity");

                Identity = identity;

                ThemeName = WebAppTool.LoadValue(AppSettings.ApplicationName + @"_" + CurrentThemeKey, AppSettings.DefaultThemeAssemblyName);

                var principal = Services.Authentication.CreatePrincipal(Services.Authentication.Identity);

                if (Local.IsInWebContext)
                {
                    HttpContext.Current.User = principal;
                }
                Thread.CurrentPrincipal = principal;
            }
Пример #7
0
        /// <summary>
        /// 사용자 인증정보인 Identity에 사용자 객체 정보를 채운다.
        /// </summary>
        protected virtual void SetIdentity(IAccessIdentity rwIdentity)
        {
            WebAppContext.Current.SetCurrent(rwIdentity);

            WebAppTool.SetValue(ApplicationKey, rwIdentity, DateTime.MinValue, string.Empty);
        }
Пример #8
0
        /// <summary>
        /// Role에 해당하는 메뉴만 필터링하여 반환한다.
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="identity"></param>
        /// <returns></returns>
        private static IEnumerable <SiteMapNode> GetAuthMenus(SiteMapNodeCollection nodes, IAccessIdentity identity)
        {
            if (identity == null)
            {
                return(null);
            }

            var roles = WebAppContext.Services.RoleService.GetRoles(identity).ToArray();

            if (roles.Length == 0)
            {
                return(Enumerable.Empty <SiteMapNode>());
            }

            return(nodes.Cast <SiteMapNode>().Where(node => roles.In(node.Roles.Cast <string>())));
        }
Пример #9
0
 public bool Equals(IAccessIdentity other)
 {
     return (other != null) && GetHashCode().Equals(other.GetHashCode());
 }
Пример #10
0
 /// <summary>
 /// 메뉴정보를 반환한다.
 /// </summary>
 /// <param name="productId">제품Id</param>
 /// <param name="identity">요청자 정보</param>
 /// <param name="menuId">메뉴Id</param>
 /// <returns>메뉴</returns>
 public abstract MenuItem FindOneMenu(string productId, IAccessIdentity identity, string menuId);
Пример #11
0
 /// <summary>
 /// 사용자의 해당 Role 소속여부를 판단합니다.
 /// </summary>
 /// <param name="roleName">Role Name</param>
 /// <param name="identity">요청자 정보</param>
 /// <returns>Role 소속 여부</returns>
 public abstract bool IsInRole(string roleName, IAccessIdentity identity);
Пример #12
0
 /// <summary>
 /// 사용자의 모든 Role정보를 반환합니다.
 /// </summary>
 /// <param name="identity">요청자 정보</param>
 /// <returns>Role 목록</returns>
 public abstract string[] GetRoles(IAccessIdentity identity);
Пример #13
0
        /// <summary>
        /// Role에 해당하는 메뉴만 필터링하여 반환한다.
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="identity"></param>
        /// <returns></returns>
        private static IEnumerable<SiteMapNode> GetAuthMenus(SiteMapNodeCollection nodes, IAccessIdentity identity)
        {
            if(identity == null)
                return null;

            var roles = WebAppContext.Services.RoleService.GetRoles(identity).ToArray();

            if(roles.Length == 0)
                return Enumerable.Empty<SiteMapNode>();

            return nodes.Cast<SiteMapNode>().Where(node => roles.In(node.Roles.Cast<string>()));
        }
Пример #14
0
        /// <summary>
        /// 메뉴정보를 반환한다.
        /// </summary>
        /// <param name="productId">제품Id</param>
        /// <param name="identity">요청자 정보</param>
        /// <param name="menuId">메뉴Id</param>
        /// <returns>메뉴</returns>
        public override MenuItem FindOneMenu(string productId, IAccessIdentity identity, string menuId)
        {
            if(IsDebugEnabled)
                log.Debug("==>> S productId={0}, identity={1}, menuId={2}", productId, identity, menuId);

            productId.ShouldNotBeWhiteSpace("값이 없습니다.");
            //identity.ShouldNotBeNull("사용자 정보가 없습니다.");
            menuId.ShouldNotBeWhiteSpace("값이 없습니다.");

            if(identity == null)
                return null;

            var provider = SiteMap.Providers[productId];

            if(provider != null)
            {
                if(IsDebugEnabled)
                    log.Debug("provider.RootNode={0}", provider.RootNode);

                if(provider.RootNode != null)
                {
                    var nodes = GetAuthMenus(provider.RootNode.GetAllNodes(), identity);
                    var node = nodes.ToList<SiteMapNode>().FirstOrDefault(nd => nd.Title == menuId);
                    if(node != null)
                    {
                        var menu = new MenuItem(node.Title, node.Title, node.Url)
                                   {
                                       NodePosition =
                                           {
                                               Level = 0,
                                               Order = 0
                                           }
                                   };
                        SetParent(node, menu);

                        return menu;
                    }
                }
            }
            return null;
        }
Пример #15
0
 public AccessItem(IAccessIdentity identity, AccessType data = AccessType.None) : this()
 {
     Identity = identity;
     Access   = data;
 }
Пример #16
0
 /// <summary>
 /// 메뉴중 사용자가 권한이 있는 루트메뉴목록
 /// </summary>
 /// <param name="productId">제품Id</param>
 /// <param name="identity">요청자 정보</param>
 /// <returns>메뉴목록</returns>ㅍ
 public abstract IEnumerable<MenuItem> GetRootMenu(string productId, IAccessIdentity identity);
Пример #17
0
 /// <summary>
 /// 제품메뉴중 사용자가 권한이 있는 메뉴목록
 /// </summary>
 /// <param name="productId">제품Id</param>
 /// <param name="identity">요청자 정보</param>
 /// <returns>메뉴목록</returns>
 public abstract IEnumerable<MenuItem> FindAllMenuByProduct(string productId, IAccessIdentity identity);
Пример #18
0
 /// <summary>
 /// 메뉴중 사용자가 권한이 있는 루트메뉴목록
 /// </summary>
 /// <param name="productId">제품Id</param>
 /// <param name="identity">요청자 정보</param>
 /// <returns>메뉴목록</returns>ㅍ
 public abstract IEnumerable <MenuItem> GetRootMenu(string productId, IAccessIdentity identity);
Пример #19
0
 /// <summary>
 /// 제품메뉴중 사용자가 권한이 있는 메뉴목록
 /// </summary>
 /// <param name="productId">제품Id</param>
 /// <param name="identity">요청자 정보</param>
 /// <returns>메뉴목록</returns>
 public abstract IEnumerable <MenuItem> FindAllMenuByProduct(string productId, IAccessIdentity identity);
Пример #20
0
 /// <summary>
 /// 메뉴정보를 반환한다.
 /// </summary>
 /// <param name="productId">제품Id</param>
 /// <param name="identity">요청자 정보</param>
 /// <param name="menuId">메뉴Id</param>
 /// <returns>메뉴</returns>
 public abstract MenuItem FindOneMenu(string productId, IAccessIdentity identity, string menuId);
Пример #21
0
 public bool Equals(IAccessIdentity other)
 {
     return((other != null) && GetHashCode().Equals(other.GetHashCode()));
 }
Пример #22
0
        /// <summary>
        /// 사용자 인증정보인 Identity에 사용자 객체 정보를 채운다.
        /// </summary>
        protected virtual void SetIdentity(IAccessIdentity rwIdentity)
        {
            WebAppContext.Current.SetCurrent(rwIdentity);

            WebAppTool.SetValue(ApplicationKey, rwIdentity, DateTime.MinValue, string.Empty);
        }