/// <summary>
        /// Authorize role
        /// </summary>
        /// <param name="role">User Role record</param>
        /// <param name="user">User</param>
        /// <returns>true - authorized; otherwise, false</returns>        
        public virtual bool AuthorizeRole(UserRole role, User user)
        {
            if (role == null)
                return false;

            if (user == null)
                return false;

            var userRoles = user.UserRoles.Where(ur => ur.Active);
            foreach (var userRole in userRoles)
                if (userRole.SystemName.Equals(role.SystemName, StringComparison.InvariantCultureIgnoreCase))
                    return true;

            return false;
        }
        /// <summary>
        /// Install permissions
        /// </summary>
        /// <param name="permissionProvider">Permission provider</param>
        public virtual void Install(IPermissionProvider permissionProvider)
        {
            //install new permissions
            var permissions = permissionProvider.GetPermissions();
            foreach (var permission in permissions)
            {
                var permission1 = GetBySystemName(permission.SystemName);
                if (permission1 == null)
                {
                    //new permission (install it)
                    permission1 = new PermissionRecord()
                    {
                        Name       = permission.Name,
                        SystemName = permission.SystemName,
                        Category   = permission.Category,
                    };

                    //default customer role mappings
                    var defaultPermissions = permissionProvider.GetDefaultPermissions();
                    foreach (var defaultPermission in defaultPermissions)
                    {
                        var userRole = userService.GetUserRoleBySystemName(defaultPermission.UserRoleSystemName);
                        if (userRole == null)
                        {
                            //new role (save it)
                            userRole = new UserRole()
                            {
                                Name       = defaultPermission.UserRoleSystemName,
                                Active     = true,
                                SystemName = defaultPermission.UserRoleSystemName
                            };
                            userService.InsertUserRole(userRole);
                        }

                        var defaultMappingProvided = (from p in defaultPermission.PermissionRecords
                                                      where p.SystemName == permission1.SystemName
                                                      select p).Any();
                        var mappingExists = (from p in userRole.PermissionRecords
                                             where p.SystemName == permission1.SystemName
                                             select p).Any();
                        if (defaultMappingProvided && !mappingExists)
                        {
                            permission1.UserRoles.Add(userRole);
                        }
                    }

                    //save new permission
                    Insert(permission1);
                }
            }
        }
 /// <summary>
 /// Authorize role
 /// </summary>
 /// <param name="role">User Role record</param>
 /// <returns>true - authorized; otherwise, false</returns>        
 public virtual bool AuthorizeRole(UserRole role)
 {
     return AuthorizeRole(role, workContext.CurrentUser);
 }