2012-02-24 2 views
1

Многих классов и метод в моем ASP.NET MVC 3 приложения украшено [Authorize] атрибутом , как это:Документирование [Авторизоваться] Использование атрибута, создание отчета

[Authorize(Roles = "assignment_edit, assignment_view")] 
public class AssignmentController : Controller { 

или это:

[HttpPost] 
[Authorize(Roles = "assignment_edit")] 
public ActionResult Create(AssignmentViewModel assignment) 
{ 

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

Я рассмотрел с использованием С #, построенные в документации и с помощью тега, как remarks хранить эту информацию, то outputting it into an xml file, но это, кажется неуклюжим - мне нужно повторно вводить в информации, которая может выйти из синхронизировать с атрибутом и выполнить обработку XML-документа для анализа информации и представления ее в читаемой форме.

Мне любопытно, есть ли у кого-либо аналогичная потребность и существуют ли какие-либо инструменты или процессы для решения этой проблемы?

+0

Вы использовали t4 раньше? –

+0

GO хотя отражения API – Eranga

+0

Отражение действительно похоже на путь. –

ответ

0

Есть несколько инструментов, доступных, Например,

Чтобы добавить документацию к вашему методу или классу, вы можете использовать «GhostDoc»

создать файл документации из выше Documentations XML, вы можете использовать "VSDocMan"

Для свободных продуктов,

Вы можете использовать SandCastle

+0

SandCastle выглядит как хорошая ставка, спасибо. –

1

Я использую ASP.NET MVC провайдера http://mvcsitemap.codeplex.com/ также SiteMap мог найти его в NuGet

Набор ролей в .sitemap файле

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 
<mvcSiteMapNode title="About" controller="Home" action="About" roles="Admin,Users"/> 
<mvcSiteMapNode title="LogOn" controller="Home" action="LogOn"/&gt 
</mvcSiteMapNode> 

И если запрос не Аутентифицированный

Sitemap.CurrentNode будет null . Поэтому я добавляю ActionFiliter

public class RolesAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (SiteMap.CurrentNode == null) 
     { 
      throw new UnauthorizedAccessException(); 
     } 
    } 
} 

In Контролер

[RolesAuthenticationAttribute] 
public class HomeController : Controller 
{ 
+0

Это интересный подход, спасибо за предложение. Хотя я использую поставщик MVC SiteMap для обеспечения навигации на своем сайте, я не думал использовать его в сочетании с пользовательским атрибутом для хранения прав доступа в файле Sitemap. –

Смежные вопросы