2012-10-18 4 views
6

목표의 모든 컨트롤 : 나는 응용 프로그램 전반에 걸쳐 웹 양식의 컨트롤에 따라 역할에 권한을 할당하는 권한 페이지를 만들려고하고목록은 C# ASP.NET 프로젝트

. 주어진 페이지에 대한 컨트롤 문자열을 만드는 코드를 작성하려고합니다. 페이지 이름은 문자열로 전달됩니다.

이 게시물은 VB.NET의 Windows 양식 응용 프로그램 용으로 작성되었지만 찾고있는 것과 매우 유사합니다. C# 및 webforms 적용 가능한 솔루션을 찾을 기대하고있다. http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/

이 다음 게시물도 내가 찾고있는 것처럼 보였지만 파일 대신 페이지 또는 컨트롤을 폼에 추가 할 때 코드가 더 일반적이고 확장되기를 기대하면서 파일에서 찾기를 제안하지 않았습니다. 하드 코딩 : Get List of Controls on each WebForm in an Assembly

일반 아이디어 :

내 생각은 사용자가 드롭 다운 목록에서 역할을 선택하는 것입니다. 그런 다음 사용자는 드롭 다운 목록에서 응용 프로그램의 페이지를 선택합니다. SelectedIndexChanged는 선택한 페이지의 webform 클래스를 쿼리하고 해당 페이지의 컨트롤 이름과 할당 할 수있는 권한 드롭 다운 목록을 나열하는 표를 만듭니다. 사용자가 컨트롤 및 권한 편집을 마쳤 으면 저장을 클릭하면 정보가 데이터베이스에 저장됩니다.

양식 인증 사용자가 페이지를로드하면 페이지는 각 컨트롤에 대한 사용 권한을 데이터베이스에 쿼리하고 사용자의 역할에 따라 사용 권한이 해당 컨트롤에 읽기 전용, 편집 또는 보이지 않는 상태로 지정됩니다. 최종 사용자 관리자는 최종 사용자 관리자가 광범위한 역할 및 권한 집합을 보유하거나 고객의 요구에 따라 일회성 작업을 수행해야하는 대신 응용 프로그램에서 사용 권한을 관리 할 수 ​​있어야합니다. 이 페이지가 다른 페이지의 컨트롤에 액세스하려고하는 유일한 페이지가된다는 점에 유의하십시오.

내 프로젝트의 네임 스페이스가 현재 프로젝트에 하나 밖에 없으므로 ASP.NET 프로젝트 또는 네임 스페이스의 모든 컨트롤을 나열하려고합니다. 현재 폼에서 컨트롤을 나열하는 많은 예제를 발견했지만 사이트 전체에서이를 수행 할 수있는 코드를 찾지 못했습니다. 나는 또한 내가 가지고있는 모든 웹 양식 클래스를 나열 할 수 있었다 : How to get all classes within namespace?

을하지만 당신은 그때 가서 거기에 정의 된 컨트롤 클래스를 조회 할 수 있음을하지 않는 것 - 사람이이 문제를 해결 할 수 있다면 조각, 나는 그것이 다음 단계로 나아갈 것이라고 생각한다. 내가 시도 무엇

는 :

  1. 하나는 모든 프로그래밍 컨트롤을 통해 웹 양식 자체를 다음 루프를 인스턴스화하는 것이 었습니다. 이것은 적어도 내가 그것을하고 있었던 방법 성공하지 않았다. Webform1 wf = 새로운 Webform1(); 또한 을 생성자와 메서드를 추가하여 시도하고 컨트롤을 반복합니다.

  2. 또한 활성자인 을 통해 webform 클래스를 인스턴스화하려고 시도했습니다.나는이 페이지의 예를 다음 시도 때 CreateInstance : Instantiate an object with a runtime-determined type

    예 :

    Page o = (Page)System.Activator.CreateInstance(Type.GetType(pageName)); 
    foreach (Control c in o.Controls) 
        lblMessages.Text = lblMessages.Text + c.ClientID.ToString() + "<BR>"; 
    

    이 또한 실패했습니다. 컴파일했지만 컨트롤 수는 0이고 물론 컨트롤이 없습니다.

  3. 내가 피하려고 마지막 방법은, (이 한 번 생산에 정적이어야 함) 한 후 여전히 권한 페이지를 가지고 내 응용 프로그램의 페이지에 컨트롤을 수집 의 수동 방법이며 관리자는 해당 시점에 역할에 사용 권한을 할당합니다. 마지막으로

:

수있는 오른쪽 방향으로 날을 가리키는 어떤 도움을 동적으로 컨트롤을 미세 조정 권한은 그 정도는 처리 권한에 다른 방법을보고이 포함 된 경우에도 감사하겠습니다합니다 .

+0

페이지가 변경됩니까? 그렇지 않으면 각 페이지에 알려진 컨트롤의 미리 컴파일 된 목록 인 '정적'목록을 작성할 수 있어야합니다. – Patrick

+0

현재로서는 동적으로 컨트롤을 생성하는 애플리케이션이 표시되지 않습니다. 그러나 새로운 페이지와 기능을 추가 할 때 목록을 수동으로 유지하지 않아도되도록 노력했습니다. – Merch

답변

0

이것이 CMS의 기본 아키텍처입니다.

Activator.CreateInstance을 사용하는 것이 올바른 길입니다. 그러나 게시물 사이에 제어 상태가 지속되는 것과 같이 훨씬 더 많은 것이 있습니다.

컨트롤이 동적으로로드되는 DotNetNuke을 살펴보십시오.