보기 모듈 : 사용자 별 액세스를 제한하는 방법


8

뷰 모듈을 사용하여 특정 사용자 만 액세스 할 수있는 뷰를 만듭니다. 뷰에는 역할 또는 권한별로 액세스 제어가 포함되어 있지만 더 세분화 된 것이 필요하다는 것을 알고 있습니다. 기본적으로 사용자 "x"와 사용자 "y"만 특정보기에 액세스 할 수 있다고 말하고 싶습니다. 사이트 관리자 역할). 따라서 이는 ACL 모듈이 개별 노드에서 작동하는 방식과 매우 유사하게 작동합니다.

맞춤보기 액세스 플러그인을 만드는 가장 좋은 방법은 무엇입니까? 나는 이것에 대해 많은 경험이 없다.

또한이 작업을 수행하기 위해 몇 가지 유효성 검사와 함께 인수를 사용하는 것에 대해 궁금합니다 (따라서 수십 개의 개별 뷰를 만들 필요가 없습니다). 예를 들어,이 뷰는 특정 노드 경로의 탭이므로 해당 노드에서 뷰를 볼 수있는 사용자를 지정하는 사용자 참조 필드를 설정하는 것이 궁금합니다. 현재 사용자가 사용자 참조 필드에 지정된 사용자와 동일한 경우에만보기를 확인하는 방법이 필요합니다.

어떤 아이디어? 아니면 내가 필요한 것보다 더 복잡하게 만들고 있습니까?

고마워, 벤


뷰 액세스 플러그인을 작성해야 할 수도 있지만 조금 더 자세하게 질문을 업데이트 할 수 있다면 다른 방법으로 달성 할 수 있습니다. 뷰는 무엇을 표시 / 표시합니까? 어떤 사용자가 볼 수 있습니까? 사용자에게 다른 역할이 있습니까? 사용자에게 특정 필드 또는 관련 필드가있어 액세스 할 수 있습니까?
Jamie Hollern

제이미, 답변 주셔서 감사합니다. 실제로 Drupal Commerce를 사용하여 독특한 종류의 온라인 상점을 만들고 있습니다. 각 제품 노드의 탭 (보기 및 편집 탭과 함께)으로 "주문"이라는 추가 탭을 만들어 특정 제품을 포함하는 모든 주문을 표시하는보기가됩니다. 특정 제품의 공급 업체는 해당 제품에 대한 "주문"보기를보고 싶은 사용자입니다.
BenK

이러한 방식으로 공급 업체는 지속적으로 제품 판매를 모니터링 할 수 있습니다. 그러나 "공급자"역할을 가진 모든 사람에게 액세스 권한을 부여하고 싶지 않습니다. 모든 공급 업체가 다른 공급 업체의 제품 판매를 볼 수 있기 때문입니다. 말이 되나요? ;-) --Ben
BenK

답변:


5

보기에 대한 권한을 제한하는 대신 해당보기로 연결되는 메뉴 항목 (노드의 탭 또는 메뉴 콜백)에 대한 권한을 제한 할 수 있습니다. "디폴트"디스플레이와 페이지 디스플레이없이 뷰를 만들 수 있습니다 (따라서 사용자는 경로를 알아낼 수 없습니다). 그런 다음 page callback메뉴 항목에서을 호출 views_embed_view하여보기를 표시하십시오. 메뉴 항목에 대한 권한을 처리하는 것이 새로운 플러그인을 작성하는 것보다 쉽습니다 (플러그인이 다른 사용자에게 도움이 될 수 있음).


제안 해 주셔서 감사합니다! 나는이 일반적인 접근 방식 (Berdir에서 제안한)을 따르지만 field_usercanaccess라는 각 노드에 사용자 참조 필드를 만들었습니다. hook_menu ()를 사용하고 현재 사용자가 필드에서 참조 된 사용자와 일치하는지 확인하는 액세스 콜백을 정의 할 수있었습니다. 그렇지 않으면 탭 (및보기)이 표시되지 않습니다. 이것은 잘 작동합니다! :-)
BenK

@BenK 최고! 나는 당신이 뭔가 일하는 것을 기쁘게 생각합니다. Drupal Answers를 훌륭한 리소스로 만드는 데 도움이되는 유용한 정보로 투표해야합니다. 당신은 아마 Berdir의 대답 @ 투표해야하는 그래서 (및 광산,하지만이없는 날은 드루팔이 더 나은 사이트를 답변하게하려고, 표를 얻으려고 노력)
Chaulky

감사. :-) Stack Exchange를 처음 사용하고 13 포인트 밖에 얻지 못했습니다. 투표하려고하면 투표에 15 점이 필요하다는 메시지가 표시됩니다. 따라서 누군가가 두 점을 아끼지 않으면 (또는 다른 방법으로 얻을 수 있습니다) 나는 대답과 질문에 분명히 투표 할 것입니다. --Ben
BenK

@ BenK 아 맞다, 나는 15 점 한계를 잊었다. 당신은 항상 질문에 대답을 시도 할 수 있습니다 ... 당신의 대답에 하나의 공감대는 10 담당자를 얻습니다.
Chaulky

6

Views Access Callback 모듈을 사용해보십시오 .

뷰에 대한 콜백 기반 액세스 제어를 제공합니다.

사용 가능한 콜백 함수는 hook_views_access_callbacks()(와 같은 방식으로 hook_perm()) 함수를 사용하여 모듈에 의해 정의 된 다음보기의 "액세스 제한"구성에서 설정할 수 있습니다.


보기 액세스 콜백을 사용하면 이상한 치명적 오류를 제외하고 훌륭하게 작동합니다. drupal.stackexchange.com/questions/3336/…를 참조하십시오 . 갈 길처럼 보이지만 어떻게 고치는가?
Druvision

2

뭔가 빠진 것이지만 새 역할을 만들어이 사용자를 추가하는 것처럼 들립니다. 그런 다음 뷰의 액세스 : 역할 기능을 사용하십시오.

콘텐츠의 액세스 권한을 콘텐츠에 연결 해야하는 경우 사용자 지정보기 액세스를 사용합니다. 보기가 메뉴 항목을 생성하는 경우보기가 액세스 기능을 통과하지 않으면 표시되지 않습니다.

메뉴 항목 만 숨기면보기가 계속 실행되고 사용자가 URI를 조정하여 데이터를 볼 수있는 것처럼 보입니다.

작은 권총


1

사용자 지정 권한 모듈을 사용하여 특정 목적에 맞는 새 권한을 만든 다음 사용자 권한 모듈을 사용하여 새 권한을 개별 사용자에게 할당하는 것은 어떻습니까?

사용자 정의 권한 모듈은 매우 가볍습니다. 그래도 사용자 권한 모듈에 대해서는 잘 모르겠습니다. 기본적으로 배후의 각 사용자에 대해 새로운 역할을 생성하기 때문에 (이 역할은 기본 권한 페이지에 표시되지 않음). 사용자가 많은 경우 역할 및 user_roles 테이블의 크기가 약간 강화 될 수 있습니다.


사용자 지정 권한을 사용하는 것이 좋습니다. 사이트 구성 권한보다 광범위 해 졌기 때문에 해당 모듈을 보지 못했습니다. 여기에서 유일한 합병증은 Drupal 7 에서이 모든 작업을 수행하고 있다는 것입니다 (아직 공식 지사가 없습니다). 그러나 내가 그 일을 할 수 있다면 (사용자 권한 모듈이 필요없이)보기의 액세스 제어에서 직접 권한을 지정할 수 있습니다. 제안 해 주셔서 감사합니다! :-)
BenK

나는 그것을 시도하고 다시보고합니다.
BenK

0

그렇습니다. 나는 당신이 (아마도 100 % 확실하지는 않지만)보기와 인수를 사용할 수 있다고 생각합니다. 인수를 현재 로그인 한 사용자로부터 가져온 사용자 ID로 설정하고 기본 인수가 아무것도 표시하지 않도록하십시오. 그것이 얼마나 안전해야할지 모르겠지만 그렇게 할 수 있어야합니다. 시험해 보시면 다시 게시하여 진행 상황을 알려주십시오.


네, 시도해보고 다시 알려 드리겠습니다. 또한 인수가있는 뷰 액세스 플러그인을 시도하고 있으므로 어떻게 진행되는지 볼 것입니다. 감사.
BenK

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.