Как я могу создать представление, которое имеет различные дисплеи согласно роли, в которой находится пользователь?

Если функция из исходного файла, доступного в файловой системе, может помочь inspect.getsource(foo) :

Если foo определяется как:

def foo(arg1,arg2):         
    #do something with args 
    a = arg1 + arg2         
    return a  

Затем:

import inspect
lines = inspect.getsource(foo)
print(lines)

Возвраты:

def foo(arg1,arg2):         
    #do something with args 
    a = arg1 + arg2         
    return a                

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

14
задан GEOCHET 23 September 2009 в 23:15
поделиться

8 ответов

Или я должен использовать, проверяют роли на странице Veiw сам, а не на действиях, раз так кто-то может показать мне, как действительно проверяют, что выставленная для обозрения страница

необходимо сделать обоих. Проверьте роли на действиях как меры безопасности и проверьте роли на представлениях для позволения/запрещения определенных средств управления.

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

HttpContext.Current.User.IsInRole("Administrator")

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

public static bool IsAdmin(this ViewUserControl pg)
{
    return pg.Page.User.IsInRole("Administrator")
}

затем в представлении, которое можно просто использовать это. IsAdmin ()

Для хранения представления создают помехи потупленному взору в использование частичных представлений

<% if (IsAdmin())
   {
      Html.RenderPartial("AdminPanel");
   }
   else
   {
      Html.RenderPartial("UserPanel");
   }
%>
26
ответ дан 1 December 2019 в 07:13
поделиться

При использовании MVC, смысл разработки должен не допустить логику в представление и в контроллере. Это кажется мне как, Вы были бы более обеспечены на дорожке разработки WebForms, чем дорожка MVC.

Все, что быть сказанным, я делаю Администратора, проверяет много моих страниц при помощи проверки как это:

<% if ((bool)ViewData["Admin"]) { %>
    <!-- Show admin controls here -->
<% } %>

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

3
ответ дан 1 December 2019 в 07:13
поделиться

Если бы изменения дисплея на основе роли - и изменение являются небольшими - затем я сделал бы регистрацию представления. Если бы определенные представления ограничиваются на основе роли, то я сделал бы регистрацию контроллера. Если бы представления полностью отличаются (это было бы трудно вообразить), то отдельные представления на роль могут быть соответствующими.

можно хотеть абстрагировать определенные определенные для роли компоненты представления в частичные представления для упрощения логики представления - в основном только необходимо проверить для включения частичного или не на основе роли.

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

5
ответ дан 1 December 2019 в 07:13
поделиться

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

btw, как Вы настраивали это в своем контроллере. Прямо сейчас мои виды контроллера что-то как код ниже, который я не думаю, корректно.

[Authorize(Roles = "Admin, Member")]
public ActionResult RegistrationInformation()
{

    return View();
}
2
ответ дан 1 December 2019 в 07:13
поделиться

не исследуя точный механизм asp.net mvc использует для ролей, я кричал бы не для помещения любой Вашей бизнес-логики в представлении, которое является тем, что Вы делаете при проверке ролей в представлении

2
ответ дан 1 December 2019 в 07:13
поделиться

Я (еще) не настолько знаком с ASP.NET MVC, но разве Вы не можете сделать, некоторое условное выражение просачивается Представление? Если Контроллер передает роль Представлению, то необходимо смочь сделать условный фильтр и отобразить определенный блок кода, если пользователь является администратором. Если бы Вы хотите отобразить полностью отдельную страницу, то у Вас было бы несколько Представлениями, иначе можно использовать один и сделать некоторое условное выражение.

В Ruby on Rails это было бы что-то как (извините, я действительно еще не знаю ASP.NET MVC):

<% if @user.admin? # is the user an admin %>
  <h3>Admin Tools</h3>
<% end %>
<p>Regular site content</p>

В направляющих Вы загрузили бы дополнительное содержание из partials; MVC ASP.NET имеет что-то подобное, но я забываю то, чем это называют. Возможно, изучите это?

Жаль я не могу иметь большего количества справки - как я сказал, что действительно не добрался для проигрывания с ASP.NET MVC.

0
ответ дан 1 December 2019 в 07:13
поделиться

У меня есть базовая модель, которая распространяется от всех остальных моделей. В этой модели я загрузил роли пользователя. Он основан на методе httpcontext.user.isinrole (). Все представления строго типизированы с учетом типа базовой модели. Поэтому я всегда могу проверить все представления, например, Model.CurrentUser.IsInRoles (Role1 | Role2). Не только в виде, конечно, но и в отверстиях.

0
ответ дан 1 December 2019 в 07:13
поделиться

Мне нравится полностью контролировать это в представлении, и я считаю, что:

<% if (User.IsInRole("Super User")) { %>
    <h1>Hello world!</h1>
<% } %>

Работает для большинства сценариев. Это также позволяет вам легко выполнять условное форматирование для других ролей, например, «Content Manager», «Registered» и т. Д.

Мне нравится ответ Тодда Смита, потому что вы можете изменить имя роли администратора, а для этого потребуется только одно изменение, тогда как, если вы поместите строку «Суперпользователь» или «Администратор» непосредственно в представление, вам придется изменить ее везде, где вы использовали значение.

0
ответ дан 1 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: