Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Тематические » Системы управления сайтами » DotNetNuke: ограничение доступа по IP

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

APTEM



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть портал, поднятый на DNN 5.0.1. Доступ к просмотру его страниц должен быть открыт для всех пользователей, заходящих с IP-адресов, заданных списком, и нужно требовать авторизоваться средствами DNN для прочих IP-адресов.
Вопрос: как это сделать наиболее человеческим путём (разработка дополнительных компонент не является препятствием)?

Всего записей: 396 | Зарегистр. 16-07-2004 | Отправлено: 22:51 13-11-2009
APTEM



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общем, проблему решил сам. Решение некрасивое, но простое.
 
добавляем параметр в web.config
Код:
<appSettings>
    ...
    <!-- параметр задаёт список IP, с которых разрешён полный доступ к порталу -->
    <add key="AllowIP" value="127.0.0.1;192.168.0.*"/>
</appSettings>

 
создаём класс App_Code/CheckIP/CheckIP.cs

Код:
using System.Configuration;
using System.Text.RegularExpressions;
 
namespace App_Code.CheckIP
{
    /// <summary>
    /// Summary description for CheckIP
    /// </summary>
    public class CheckIP
    {
        public static bool Allowed(string clientIP)
        {
            string[] ips = (ConfigurationManager.AppSettings["AllowIP"] ?? "127.0.0.1").Split(',', ';');
            foreach (string ip in ips)
            {
                if (ip == clientIP)
                {
                    return(true);
                }
                if (ip.Contains("*"))
                {
                    if (Regex.IsMatch(clientIP, "^" + ip.Replace(".", "\\.").Replace("*", ".*?") + "$"))
                    {
                        return true;
                    }
                }
            }
            return false;
        }
    }
}

 
правим процедуру BindRegister в /DesktopModules/Admin/Security/ManageUsers.ascx.vb

Код:
        Private Sub BindRegister()
 
            If Not CheckIP.Allowed(Request.ServerVariables.Item("REMOTE_ADDR")) And PortalSettings.LoginTabId > 0 Then
                Response.Redirect(Common.Globals.NavigateURL(PortalSettings.LoginTabId), True)
            End If
 
...
 

 
к дефолтной шкурке (/Portals/_default/Skins/MinimalExtropy/index.ascx) добавляем behind-scene код (если используется таковая)

Код:
<%@ Control language="C#" AutoEventWireup="false" Explicit="True" CodeFile="index.ascx.cs" Inherits="DotNetNuke.UI.Skins.MinimalExtropy" %>

 
собственно, код (/Portals/_default/Skins/MinimalExtropy/index.ascx.cs)

Код:
using System;
using App_Code.CheckIP;
using DotNetNuke.Entities.Users;
 
namespace DotNetNuke.UI.Skins
{
    /// <summary>
    /// </summary>
    public partial class MinimalExtropy: Skin
    {
        protected MinimalExtropy()
        {
            Load += Page_Load;
        }
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (PortalSettings.LoginTabId <= 0) // если не задана страница входа - некуда выкидывать
                return;
            if (PortalSettings.ActiveTab.TabID == PortalSettings.LoginTabId)  // если мы на странице входа - входим
                return;
            UserInfo userInfo = UserController.GetCurrentUserInfo();
            if (userInfo!=null && userInfo.UserID > 0)
                return;
            // а иначе - проверка на допустимость IP
            if (!CheckIP.Allowed(Request.ServerVariables["REMOTE_ADDR"]))
            {
                Response.Redirect(Common.Globals.NavigateURL(PortalSettings.LoginTabId), true);
                return;
            }
        }
    }
}

 
и обязательно нужно создать страницу входа, прописав параметры портала

Всего записей: 396 | Зарегистр. 16-07-2004 | Отправлено: 17:10 17-11-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Тематические » Системы управления сайтами » DotNetNuke: ограничение доступа по IP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru