powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / [MVC] Базовый контроллер
25 сообщений из 128, страница 4 из 6
[MVC] Базовый контроллер
    #38216084
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANA,

я понял уже, что вы зашли чисто поржать )) я говорил о конкретной задаче в начале топика, а? откройте 1-ую страницу, первое сообщение в теме и перечитайте. ну пожалуйста...Читал и отвечал даже на него. И конкретный пример привёл.
И Вы вроде даже согласились, что в предложенном мной примере базовый контроллер имеет смысл.
Но при этом добавили какие-то не понятные мне рассуждения про подсовывания чего-то куда-то. Вы мне можете обяснить, что этим хотели сказать в контексте предложеного мной кейса, или продолжите дальше флеймить с МСУ?
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216085
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЗачем привязывать роли к конкретным категориям?
Роли не привязаны к конкретным категориям, с чего ты взял?

ПарамонВ таком случае, добавляю поле в таблицу продуктов, и отмечаю как продукты для менеджера.
Зачем что-то добавлять в таблицу продуктов и отмечать? Продукты могут быть не только для роли, продукты могут быть, например, для пользователей, чьи покупки > 100 руб. Что, будешь добавлять поле в таблицу продуктов?

ПарамонОстальное делается в экшене Index, зачем там фильтры или базовый контроллер.
Экшен тут вообще идет лесом, ты чего. Всего 100 продуктов. Все они доступны админу, а манагеру - только 50. Причем тут вообще экшен?
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216089
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУhVostt, давай я задам тебе конкретный пример, а ты ответишь, как нужно решать его.

1. В приложении 2 роли, админ и менеджер
2. Справочник продуктов
3. Нужно дать доступ для справочника продуктов (Index) только для админа и менеджера
4. Админу разрешается всё
5. Менеджеру разрешается просматривать только продукты с категориями 1, 2, 3, с датой отгрузки = вчера или сегодня.

Это элементарнейшая безопасность, детский сад просто. Набрал попкорна.

1. На экшен справочника [Authorize(Roles = "admin,manager")]

2. Во вью рендерить кнопки изменения при User.IsInRole("admin")

3. На экшены изменения [Authorize(Roles = "admin")]

4. Что менеджеру можно просмотривать продукты с категориями и датой, это решается в IProductService.GetProducts(), контроллеру должно быть фиолетово, что сервис отдаст. Что отдаст, то и покажет, сервису виднее что отдавать и по какой логике. Если скажешь что фильтровать по юзерам данные должен контроллер, тогда я тебе сразу скажу, архитектура -- УГ.

5. КАКОЕ это всё имеет отношение к вопросу БАЗОВОГО контроллера??????

Не торопи коней - идём дальше. Теперь нам нужно показывать все продукты менеджеру (Index), но доступные для редактирования (продукты с категориями 1, 2, 3, с датой отгрузки = вчера или сегодня) подсвечивать. Более того, в карточке продукта (Index/{id}) нам нужно запрещать просмотр, если категория не 1-3 и дата отгрузки <> вчера / сегодня.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216091
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ, не исключено написание своих фильтров типа Authorize
Это не нужно, т.к. речь не о Authorize, а о построении UI в разрезе полномочий.

hVosttглавное, что этому не место в контроллере.
А у кого этому место в контроллере? Этим должен заниматься отдельный класс и только он. Базовый контроллер - проводник к этому классу.

hVosttконтроллер тем и замечателен, что там содержится минимум кода. в основном вызовы нужных Services и аспекты. еще скажи логику кеширования ты реализуешь в базовом контроллере, чем уже окончательно добьёшь мой мозг.
У контроллере нет реализации, ты долго будешь тупить?

hVosttя прошу кейс, где реализация кастомного базового контроллера будет действительно лучше аспектов и других возможностей фреймворка, давая ощутимые преимущества в архитектуре приложения.
Я тебе уже достаточно привел примеров, ты просто до них еще не дорос.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216099
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПарамонЗачем привязывать роли к конкретным категориям?
Роли не привязаны к конкретным категориям, с чего ты взял?

МСУ Менеджеру разрешается просматривать только продукты с категориями 1, 2, 3



МСУЭкшен тут вообще идет лесом, ты чего. Всего 100 продуктов. Все они доступны админу, а манагеру - только 50. Причем тут вообще экшен?
Это примерно то, что имел в виду.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public ActionResult Index()
{
      var data = new ProductsViewModel();

      if(User.IsInRole("Admin"))
         data = repo.GetProductsForAdmin();
      else
         data = repo.GetProductsForManager(); // where isformanger == true && somedate == somevalue

     return View(data);
}


Типа того.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216104
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

МСУНе торопи коней - идём дальше. Теперь нам нужно показывать все продукты менеджеру (Index), но доступные для редактирования (продукты с категориями 1, 2, 3, с датой отгрузки = вчера или сегодня) подсвечивать. Более того, в карточке продукта (Index/{id}) нам нужно запрещать просмотр, если категория не 1-3 и дата отгрузки <> вчера / сегодня.

Если речь идёт о доступе на уровне данных, а не только действий, бизнес-логика знает о ролях и элементах доступа.
Элементы доступа для кейса: "products/index", "products/edit". Входят в роль "manager".

IProductManagerService.GetList() возвращает для каждой записи также элементы доступа к ним для роли пользователя . Контроллер во вью передаёт модель с маркером индикации, в зависимости от элемента доступа, вью подсвечивает записи с соответствующим маркером и дает ссылку на страницу редактирования товара.

IProductManagetService.GetItem() возвращает тоже самое только в одном экземпляре по Id. действие Index/{id} контроллера вызывает вью, информирующую пользователя о том, что доступ запрещен, если нет нужного элемента доступа .

контроллер не должен реализовывать логику доступа к данным ни в каком виде. все, что ему требуется, это информация от сервиса, что можно, а что нельзя делать с полученной информацией.

сократить расходы на кодинг можно, создав свой фильтр AccessAction(AccessItem = "product/edit"), действующий на событие Executed и перехватывающий вывод Result, если модель не обладает нужным AccessItem. тогда действие контроллера вообще лишается необходимости каких-либо проверок. получает данные и вызывает вью, как будто все все можно.

опят таки, здесь ни в каком месте не нужен базовый контроллер. все решается нужным кастомным фильтром.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216108
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДайте убедительный довод зачем может понадобиться определять свой базовый контроллер?
Что то я вообще не догоняю об чем речь, так можно переопределять базовый контроллер или нет?
там для всяких фентифлюшек быстрого доступа к чему то, типа как генерации контракта на работу, ленивого кеширования
чего то общего и тд. Конечно речь не идет там расположить весь механизм какой нибудь пиздятины типа вставки удаления модификации данных и отслеживания разрешений. Но быстрый доступ к объекту который отвечает за это матерное слово - почему нет?
Другой вопрос стоит ли создавать такой объект, или просто въебенить через фильтры или еще как - альтернативно хранению его в переопределенном бк., так это к теме топика отношение не имеет, так же как мой жидкий стул, к погоде на ямайке... ???
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216111
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЭто примерно то, что имел в виду.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public ActionResult Index()
{
      var data = new ProductsViewModel();

      if(User.IsInRole("Admin"))
         data = repo.GetProductsForAdmin();
      else
         data = repo.GetProductsForManager(); // where isformanger == true && somedate == somevalue

     return View(data);
}


Типа того.
Так не делают - это раз (упаришься все роли перечислять для всех вариантов). Во-вторых, как будешь вот такие задачи решать 14146874 ?
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216116
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕсли речь идёт о доступе на уровне данных, а не только действий, бизнес-логика знает о ролях и элементах доступа.
Элементы доступа для кейса: "products/index", "products/edit". Входят в роль "manager".
Идет речь о любых уровнях - и данных и действий. "Бизнес-логика" - что за логика и где она должна размещаться?

hVosttIProductManagerService.GetList() возвращает для каждой записи также элементы доступа к ним для роли пользователя . Контроллер во вью передаёт модель с маркером индикации, в зависимости от элемента доступа, вью подсвечивает записи с соответствующим маркером и дает ссылку на страницу редактирования товара.
Логика выставления этого маркера должна быть в контроллере? Ты перечишь сам себе, сначала в DI, потом в фильтре, потом в глобальном синглтоне. А теперь - в контроллере? Молодец, чё.

hVosttIProductManagetService.GetItem() возвращает тоже самое только в одном экземпляре по Id. действие Index/{id} контроллера вызывает вью, информирующую пользователя о том, что доступ запрещен, если нет нужного элемента доступа .
А причем тут "доступ запрещен" и "просто нет элемента"?

hVosttконтроллер не должен реализовывать логику доступа к данным ни в каком виде. все, что ему требуется, это информация от сервиса, что можно, а что нельзя делать с полученной информацией.
Ничего не понимаю, то должен, то не должен. Ты определись уже, кто что должен.

hVosttопят таки, здесь ни в каком месте не нужен базовый контроллер. все решается нужным кастомным фильтром.
Десятый раз повторяю, где хранится логика:

...HasUserProductView = роль админ || (роль менежер $$ статус == 3) || ((роль вьювер && дата = сегодня) || роль вьювер && категория = 7).

? В фильтре? А как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.?
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216117
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиhVosttДайте убедительный довод зачем может понадобиться определять свой базовый контроллер?
Что то я вообще не догоняю об чем речь, так можно переопределять базовый контроллер или нет?
там для всяких фентифлюшек быстрого доступа к чему то, типа как генерации контракта на работу, ленивого кеширования
чего то общего и тд. Конечно речь не идет там расположить весь механизм какой нибудь пиздятины типа вставки удаления модификации данных и отслеживания разрешений. Но быстрый доступ к объекту который отвечает за это матерное слово - почему нет?
Другой вопрос стоит ли создавать такой объект, или просто въебенить через фильтры или еще как - альтернативно хранению его в переопределенном бк., так это к теме топика отношение не имеет, так же как мой жидкий стул, к погоде на ямайке... ???
Он уже сам запутался в показаниях.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216119
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТак не делают - это раз (упаришься все роли перечислять для всех вариантов). Во-вторых, как будешь вот такие задачи решать
Условия для всех вариантов, описываюся в сервисном слое, не вижу проблемы. (это для примера)
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216123
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУТак не делают - это раз (упаришься все роли перечислять для всех вариантов). Во-вторых, как будешь вот такие задачи решать
Условия для всех вариантов, описываюся в сервисном слое, не вижу проблемы. (это для примера)
Условия для всех вариантов описываются в отдельной песочнице (Security), а в сервисном слове уже используется эта информация. А базовый контроллер - отличное место для размещения экземпляра этой Security.

...HasUserProductView = роль админ || (роль менежер $$ статус == 3) || ((роль вьювер && дата = сегодня) || роль вьювер && категория = 7).

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class Security
{
    public SecurityUser User { get; set; }

    private bool HasProductView(Product product)
    {
        return
            User.IsAdmin ||  // админ
            (User.IsManager &&  // менеджер
                new[] { 1, 2, 3 }.Contains(product.CategoryId) &&
                (product.ShipmentDate.Date == DateTime.Today || product.ShipmentDate.Date == DateTime.Today.AddDays(-1))
            );
    }

    private IQueryable<Product> AddToProductList(IQueryable<Product> products) // EF Include(Users && Roles)
    {
        return products.Where(админ || (менеджер && ...));
    }
}
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216124
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.?
Не говори что тянешь все 100 продуктов, чтобы показать 50 из них менеджеру по условию во вью )
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216125
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

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

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

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

мой вопрос относится только к тому, когда это действительно нужно. прокидывать ссылки на сервисы — можно, но не нужно.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216126
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, более того, бывают случаи, когда безопасность на уровне коллекции элементов невозможно описать для IQueryable<T>, т.к. запрос не может транслироваться или будет не оптимально / трудозатратно. Поэтому обычно делают IQueryable<T> + HasProductView. Ну понял, о чем, думаю. Это hVostt'у нужно всё по 100 раз пережевывать.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216127
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ new[] { 1, 2, 3 }.Contains(product.CategoryId)
Хардкод категорий улыбнул )
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216128
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУА как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.?
Не говори что тянешь все 100 продуктов, чтобы показать 50 из них менеджеру по условию во вью )
С работой IQueryable не знаком?

Код: c#
1.
IQueryable<Product> AddToProductList(IQueryable<Product> products) 
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216129
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУ new[] { 1, 2, 3 }.Contains(product.CategoryId)
Хардкод категорий улыбнул )
Не принципиально, мы обсуждаем концепцию. Надо - выноси в енумы.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216130
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

я заторчал от этого коммента :)

Конечно речь не идет там расположить весь механизм какой нибудь пиздятины типа вставки удаления модификации данных и отслеживания разрешений. Но быстрый доступ к объекту который отвечает за это матерное слово - почему нет?

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

Другой вопрос стоит ли создавать такой объект, или просто въебенить через фильтры или еще как - альтернативно хранению его в переопределенном бк., так это к теме топика отношение не имеет, так же как мой жидкий стул, к погоде на ямайке... ???

вы лучше поделитесь своей травой ))
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216134
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ, в бизнес-логике решать. это не задача контроллера.
Ты почему ведешь себя как баран у новых ворот? Тебе уже все говорят, что логики в контроллере нет. Ты не понимаешь этого?

hVosttкакие-то действия еще можно разрешать в зависимости от роли. но не в случае с данными.
Такое ощущение, что я разговариваю со стеной, ты ни в какую не хочешь понимать, что тебе пишут. Ты в вакууме?

hVosttкак это можно вынести в абстракцию я уже сказал, делается нужный фильтр-перехватчик и вешается на действие или на контроллер в целом. никакой базовый контроллер в этой схеме секьюрити нафиг не впился.
Я тебе 100 раз повторил - этот вариант не устроит, т.к. UI отстраивается в разрезе полномочий пользователя. 101 раз повторить?

hVosttмой вопрос относится только к тому, когда это действительно нужно. прокидывать ссылки на сервисы — можно, но не нужно.
Значит таки уже можно? Великолепно. А почему не нужно, поведаешь нам?
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216136
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУОн уже сам запутался в показаниях.

говори только за себя, плз. не уймешь своё чсв, да? ))
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216137
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУОн уже сам запутался в показаниях.

говори только за себя, плз. не уймешь своё чсв, да? ))

Тебе 100 раз повторишь одно и тоже, и только со 101 ты начинаешь понимать, что тебе пишут.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216138
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДесятый раз повторяю, где хранится логика:

...HasUserProductView = роль админ || (роль менежер $$ статус == 3) || ((роль вьювер && дата = сегодня) || роль вьювер && категория = 7).

? В фильтре? А как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.?

в бизнес-логике. читать умеешь? или то комменты по диагонале читаешь, увидел слово, вырвал из контекста и достебался с умным видом. очки на нос не лезут? поправь быстрей и прочитай вот это:

логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.
логика доступа к данным хранится в бизнес-логике.


может лучше картинку?

секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.
секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа.


секьюрити не решает что и кому показывать, разрешать или не разрешать. а если у тебя решает, то мне искренне тебя жаль. серьезно. это уже болезнь в последней стадии, и я не уверен что это лечится.
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216139
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttв бизнес-логике. читать умеешь? или то комменты по диагонале читаешь, увидел слово, вырвал из контекста и достебался с умным видом. очки на нос не лезут? поправь быстрей и прочитай вот это:
Логика хранится в логике? Масло масляное. Слушай, ты не только хреновый программист, ты еще и русский язык не знаешь.
Для тех, кто засел в танке - "в бизнес-логике" - это что такое? Может ты во View хранишь свою бизнес логику. Может в контроллере. Может в репозитории. Опять трудности с пониманием прямых понятных вопросов?

hVosttсекьюрити не решает что и кому показывать, разрешать или не разрешать. а если у тебя решает, то мне искренне тебя жаль. серьезно. это уже болезнь в последней стадии, и я не уверен что это лечится.
Где у меня секьюрити что-то решает, покажи пальцем? Ты инопланетянен?
...
Рейтинг: 0 / 0
[MVC] Базовый контроллер
    #38216141
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУhVosttсекьюрити не решает что и кому показывать, разрешать или не разрешать. а если у тебя решает, то мне искренне тебя жаль. серьезно. это уже болезнь в последней стадии, и я не уверен что это лечится.
Где у меня секьюрити что-то решает, покажи пальцем? Ты инопланетянен?
У меня секьюрити отвечает на вопрос, может ли пользователь что-то сделать в рамках своих ролей и бизнес-требований. Всё. А решать может кто угодно - view, controller, dataservice, repository и т.д. Ты код каким местом читаешь, признавайся?
...
Рейтинг: 0 / 0
25 сообщений из 128, страница 4 из 6
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / [MVC] Базовый контроллер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]