Как обращаться с индивидуальной безопасностью на каждой странице?

1

Это может показаться глупым вопросом, но я собираюсь внедрить собственную базу данных безопасности и структуру для нового сайта. Мне было интересно, как лучше справиться с этим.

ПРИМЕЧАНИЕ. Я НЕ использую членство ASP.NET для этого, я использую настраиваемую базу данных и все, что необходимо для управления пользователями.

Там будет несколько уровней безопасности, поэтому я немного в тупике, не делая это слишком сложно. Единственное, о чем я мог подумать, это проверить на КАЖДОЙ СТРАНИЦЕ в Page_Load, если у них есть правильная безопасность:

protected void Page_Load(object sender, EventArgs e)
{
     CustomUser user = Session["User"] as CustomUser;
     if(user != null && user.CanAccessFeature("TopicModeration"))
     {
          //initialize page elements
     }
     else 
     {
          Response.Redirect("Default.aspx?featureDenied=TopicModeration", false);
          Context.ApplicationInstance.CompleteRequest();
     }
}

Это хорошо работает, но если у меня есть десятки страниц с разными ограничениями, это может немного повториться. У кого-нибудь есть мысли по этому поводу? Должен ли я наследовать от System.Web.Page для каждой функции безопасности и использовать ее на странице?

Благодарю!

  • 0
    Вы используете мастер-страницу? Если это так, выполните аутентификацию в событии загрузки главной страницы
  • 0
    @TheShaman Я использую стандартную главную страницу для всех страниц, но, как я уже сказал, есть много функций безопасности. Должен ли я создать главную страницу для каждой функции безопасности и проверить ее там?
Показать ещё 4 комментария
Теги:
security
webforms

2 ответа

0

Вы можете создать базовый класс и сделать все основные страницы (или страницы) наследуемыми для этого класса.

Вот пример, когда главная страница наследует класс.

  1. Класс для всех основных страниц для наследования.

    public class PageBase: System.Web.UI.MasterPage
    {       
       protected override void OnLoad(EventArgs e)
       {
           //Put your security code here...
           base.OnLoad(e);
       }  
    }
    
  2. Вот главная страница, наследующая класс выше.

    public partial class Site1ColMaster : MySite.PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
          //Master page
        }
    }
    
  • 0
    Так нужно ли мне создавать базовый класс для каждой функции безопасности? Как базовый класс для: TopicModeration, TopicAdministration, PostAdministration, PostModeration, чат, загрузки, ...?
0

Могу ли я предложить следующий подход:

Создайте собственный класс контроллера:

public class CustomController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        CustomUser user = Session["User"] as CustomUser;
        if(user != null && user.CanAccessFeature("TopicModeration"))
        {
            base.OnActionExecuting(filterContext);
        }
        else
        {
            filterContext.Result = new RedirectResult("Default.aspx?featureDenied=TopicModeration", false);
            Context.ApplicationInstance.CompleteRequest();
        }
    }
}

Тогда у вас могут быть ваши контроллеры, где вы хотите, чтобы эта проверка наследовалась от этого контроллера.

  • 0
    Я использую веб-формы, это будет работать или это только для ASP.NET MVC?
  • 0
    Мне очень жаль, но я не знаю, как это сделать в веб-формах. Я знаю, что вы можете смешивать MVC с веб-формами, но я не знаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню