예제 #1
0
 public void OnGetUser(GetUserEventArgs e)
 {
     this.Invoke(new MethodInvoker(() =>
     {
         this.Invoke(new MethodInvoker(() =>
         {
             this.lblUserName.Text = e.User.UserName;
         }));
     }));
 }
        /// <summary>
        /// Returns the user to check.  Default is to use the HttpContext's User Identity as the username
        /// </summary>
        /// <param name="httpContext">The HttpContext of the request</param>
        /// <returns>The UserInfo, should return the Public user if they are not logged in.</returns>
        private UserInfo GetCurrentUser(HttpContextBase httpContext)
        {
            UserInfo FoundUser = null;

            // Create GetUser Event Arguments
            GetUserEventArgs UserArgs = new GetUserEventArgs()
            {
                HttpContext = httpContext,
            };

            using (var KenticoAuthorizeGetUserTaskHandler = AuthorizeEvents.GetUser.StartEvent(UserArgs))
            {
                if (UserArgs.FoundUser == null)
                {
                    try
                    {
                        // Grab Username and find the user
                        string Username = !string.IsNullOrWhiteSpace(UserArgs.FoundUserName) ? UserArgs.FoundUserName : DataHelper.GetNotEmpty((httpContext.User != null && httpContext.User.Identity != null ? httpContext.User.Identity.Name : "public"), "public");
                        UserArgs.FoundUser = CacheHelper.Cache(cs =>
                        {
                            UserInfo UserObj = UserInfo.Provider.Get()
                                               .WhereEquals("Username", Username)
                                               .FirstOrDefault();
                            if (UserObj == null || !UserObj.Enabled)
                            {
                                UserObj = UserInfo.Provider.Get()
                                          .WhereEquals("Username", "public")
                                          .FirstOrDefault();
                            }
                            if (cs.Cached)
                            {
                                cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|byid|" + UserObj.UserID);
                            }
                            return(UserObj);
                        }, new CacheSettings(60, "KenticoAuthorizeGetCurrentUser", Username));
                    }
                    catch (Exception ex)
                    {
                        UserArgs.ExceptionOnLookup = ex;
                    }
                }

                // Finish event
                KenticoAuthorizeGetUserTaskHandler.FinishEvent();

                // Pass found user along
                FoundUser = UserArgs.FoundUser;
            }

            return(FoundUser);
        }
예제 #3
0
        /// <summary>
        /// Returns the user to check.  Default is to use the HttpContext's User Identity as the username
        /// </summary>
        /// <param name="httpContext">The HttpContext of the request</param>
        /// <returns>The UserInfo, should return the Public user if they are not logged in.</returns>
        public async Task <UserInfo> GetCurrentUserInfoAsync()
        {
            UserInfo foundUser = null;
            var      site      = SiteContextSafe();
            // Create GetUser Event Arguments
            GetUserEventArgs userArgs = new GetUserEventArgs()
            {
                HttpContext = _httpContext
            };

            var customUser = await _authorizationContextCustomizer.GetCustomUserAsync(userArgs, AuthorizationEventType.Before);

            if (customUser != null)
            {
                return(customUser);
            }


            // Grab Username and find the user
            string username = !string.IsNullOrWhiteSpace(userArgs.FoundUserName) ? userArgs.FoundUserName : DataHelper.GetNotEmpty((_httpContext.User != null && _httpContext.User.Identity != null ? _httpContext.User.Identity.Name : "public"), "public");

            foundUser = await _progressiveCache.LoadAsync(async cs =>
            {
                var userObj = await _userInfoProvider.GetAsync(username);

                if (userObj == null || !userObj.Enabled)
                {
                    userObj = await _userInfoProvider.GetAsync("public");
                }
                if (cs.Cached)
                {
                    cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|byid|" + userObj.UserID);
                }
                return(userObj);
            }, new CacheSettings(60, "KenticoAuthorizeGetCurrentUser", username));

            userArgs.FoundUser = foundUser;
            customUser         = await _authorizationContextCustomizer.GetCustomUserAsync(userArgs, AuthorizationEventType.Before);

            if (customUser != null)
            {
                foundUser = customUser;
            }

            return(foundUser);
        }
예제 #4
0
 public void OnGetUser(GetUserEventArgs e)
 {
     throw new NotImplementedException();
 }
 public Task <UserContext> GetCustomUserContextAsync(GetUserEventArgs userArgs, AuthorizationEventType eventType)
 {
     return(Task.FromResult <UserContext>(null));
 }
예제 #6
0
        public async Task <UserContext> GetCurrentUserAsync()
        {
            var site = SiteContextSafe();

            // Create GetUser Event Arguments
            GetUserEventArgs userArgs = new GetUserEventArgs()
            {
                HttpContext = _httpContext
            };

            // Allow them to customize the user context
            var customUserContext = await _authorizationContextCustomizer.GetCustomUserContextAsync(userArgs, AuthorizationEventType.Before);

            if (customUserContext != null)
            {
                return(customUserContext);
            }

            // Get the current user
            var foundUser = await GetCurrentUserInfoAsync();

            // Allow them to customize the user context again now with the current UserInfo known
            userArgs.FoundUser = foundUser;
            customUserContext  = await _authorizationContextCustomizer.GetCustomUserContextAsync(userArgs, AuthorizationEventType.After);

            if (customUserContext != null)
            {
                return(customUserContext);
            }

            // Build user context
            return(await _progressiveCache.LoadAsync(async cs =>
            {
                if (cs.Cached)
                {
                    cs.CacheDependency = CacheHelper.GetCacheDependency(new string[]
                    {
                        $"{UserInfo.OBJECT_TYPE}|byname|{foundUser?.UserName ?? "public"}",
                        $"{UserRoleInfo.OBJECT_TYPE}|all",
                        $"{RolePermissionInfo.OBJECT_TYPE}|all"
                    });
                }

                if (foundUser?.IsPublic() ?? true)
                {
                    var userContext = new UserContext()
                    {
                        UserName = "******",
                        IsAuthenticated = false,
                        Roles = Array.Empty <string>()
                    };
                    return userContext;
                }
                else
                {
                    // Get roles and permissions
                    var userContext = new UserContext()
                    {
                        UserName = foundUser.UserName,
                        IsAuthenticated = true,
                        IsGlobalAdmin = foundUser.SiteIndependentPrivilegeLevel == CMS.Base.UserPrivilegeLevelEnum.GlobalAdmin,
                    };

                    if (foundUser.SiteIndependentPrivilegeLevel == CMS.Base.UserPrivilegeLevelEnum.Admin || foundUser.SiteIndependentPrivilegeLevel == CMS.Base.UserPrivilegeLevelEnum.Editor)
                    {
                        // Only add editor/admin if they are on this site
                        var userSite = await new ObjectQuery <UserSiteInfo>()
                                       .WhereEquals(nameof(UserSiteInfo.UserID), foundUser.UserID)
                                       .WhereEquals(nameof(UserSiteInfo.SiteID), site.SiteID)
                                       .GetEnumerableTypedResultAsync();
                        if (userSite.Any())
                        {
                            userContext.IsEditor = foundUser.SiteIndependentPrivilegeLevel == CMS.Base.UserPrivilegeLevelEnum.Editor;
                            userContext.IsAdministrator = foundUser.SiteIndependentPrivilegeLevel == CMS.Base.UserPrivilegeLevelEnum.Admin;
                        }
                    }

                    // Roles
                    var rolesResults = (await new ObjectQuery <RoleInfo>()
                                        .Where($"RoleID in (Select UR.RoleID from CMS_UserRole UR where UserID = {foundUser.UserID})")
                                        .WhereEqualsOrNull(nameof(RoleInfo.SiteID), site.SiteID)
                                        .Columns(nameof(RoleInfo.RoleName))
                                        .GetEnumerableTypedResultAsync());
                    var roles = rolesResults.ToList().Select(x => x.RoleName);

                    var membershipRolesResults = (await new ObjectQuery <RoleInfo>()
                                                  .Source(x => x.Join <MembershipRoleInfo>("CMS_Role.RoleID", "CMS_MembershipRole.RoleID"))
                                                  .Source(x => x.Join <MembershipInfo>("CMS_MembershipRole.MembershipID", "CMS_Membership.MembershipID"))
                                                  .Source(x => x.Join <MembershipUserInfo>("CMS_Membership.MembershipID", "CMS_MembershipUser.MembershipID"))
                                                  .WhereEquals("UserID", foundUser.UserID)
                                                  .Columns(nameof(RoleInfo.RoleName))
                                                  .GetEnumerableTypedResultAsync());
                    var membershipRoles = membershipRolesResults.ToList().Select(x => x.RoleName);

                    userContext.Roles = roles.Union(membershipRoles);

                    // Permission names
                    var permissionsResults = (await new ObjectQuery <PermissionNameInfo>()
                                              .Source(x => x.Join <ResourceInfo>("CMS_Permission.ResourceID", "CMS_Resource.ResourceID"))
                                              .Source(x => x.Join <RolePermissionInfo>("CMS_Permission.PermissionID", "CMS_RolePermission.PermissionID"))
                                              .Source(x => x.Join <RoleInfo>("CMS_RolePermission.RoleID", "CMS_Role.RoleID"))
                                              .WhereIn(nameof(RoleInfo.RoleName), userContext.Roles.ToArray())
                                              .Columns($"{nameof(ResourceInfo.ResourceName)}+'.'+{nameof(PermissionNameInfo.PermissionName)} as PermissionName")
                                              .GetEnumerableResultAsync());
                    userContext.Permissions = permissionsResults.ToList().Select(x => (string)x["PermissionName"]);
                    return userContext;
                }
            }, new CacheSettings(60, "UserContext", foundUser?.UserName ?? "public", site.SiteID)));
        }