Rails-사용자 그룹의 멤버십 / 소유권 파괴

T. 콜

사용자가 그룹의 소유자 인 경우 그룹 멤버십을 "파괴"할 때 그룹 소유권을 "파괴"할 수 있어야합니다. "사용자", "그룹 / Cliq"및 "그룹 / CliqMembership"모델이 있습니다. 사용자가 그룹을 만들면 해당 그룹의 "소유자"가됩니다. 그러면 다른 사용자가 그룹에 가입 할 수 있습니다. 사용자가 그룹에서 탈퇴하면 해당 사용자 및 그룹에 대한 멤버십 연결이 삭제됩니다. 그러나 소유자가 그룹을 탈퇴하면 "소유권"이 아닌 "구성원"만 제거됩니다. 쉬운 해결책이 있어야한다고 생각하지만 약간 갇혀 있습니다.

명확성을 위해 : Cliqs = 그룹; 문제는 소유권 연결과 회원 연결을 동시에 삭제하는 방법입니다. "소유자"가 그룹에서 탈퇴하면 "그룹 소유권"과 "그룹 멤버십"이 삭제되기를 원합니다. 제쳐두고 : "소유자"가 떠날 때 소유 그룹을 "종속 파괴"로 만들려면 어떻게해야합니까?

내 모델은 다음과 같습니다.

class Cliq < ActiveRecord::Base
 belongs_to :owner, class_name: 'User'

 has_many :cliq_memberships
 has_many :members, through: :cliq_memberships, source: :user

end

class CliqMembership < ActiveRecord::Base
 belongs_to :cliq
 belongs_to :user
end

class User < ActiveRecord::Base
 has_one :owned_cliq, foreign_key: 'owner_id', class_name: 'Cliq', dependent: :destroy

 has_many :cliq_memberships
 has_many :cliqs, through: :cliq_memberships
 .
 .
 .
end

그리고 내 컨트롤러 :

class CliqsController < ApplicationController

def show
    @cliq = Cliq.find(params[:id])
end

def new
    @cliq = Cliq.new(params[:id])
end

def create
    @cliq = current_user.build_owned_cliq(cliq_params)
    @cliq.members << current_user

    if @cliq.save
        redirect_to current_user
    else
        redirect_to new_cliq_path
    end
end

def destroy
    @cliq = current_user.owned_cliq.find(params[:id])
    flash[:alert] = "Are you sure you want to delete your Cliq? Your Cliq and all of its associations will be permanently deleted."
    @cliq.destroy

    if @cliq.destroy
       redirect_to current_user
       flash[:notice] = "You deleted the Cliq."
    else
        redirect_to current_user
        #set up error handler
        flash[:notice] = "Failed to delete Cliq."
    end
end


def cliq_params
    params.require(:cliq).permit(:name, :cliq_id)
end

class CliqMembershipsController < ApplicationController

def show
end

def create
    #Cliq or Cliq_ID?
    @cliq = Cliq.find(params[:cliq])

    @cliq_membership = current_user.cliq_memberships.build(cliq: @cliq)
    @cliq.members << current_user

    if @cliq_membership.save
        flash[:notice] = "Joined #{@cliq.name}"
    else
        #Set up multiple error message handler for rejections/already a member
        flash[:notice] = "Not able to join Cliq."
    end
    redirect_to cliq_url
end

def destroy
    @cliq_membership = current_user.cliq_memberships.find(params[:id])
    @cliq_membership.destroy

    if @cliq_membership.destroy
       flash[:notice] = "You left the Cliq."
    redirect_to user_path(current_user)

    else
    end
    end
end

class UsersController < ApplicationController

def show 
@user = User.find(params[:id])
@uploads = Upload.all
@cliq_memberships = CliqMembership.all
@cliqs = Cliq.all
end

end
비샬

CliqMemberships 컨트롤러의 삭제 작업에서 CliqMembership을 삭제하기 직전에 멤버십을 확인하는 것처럼 current_user의 그룹 소유권을 확인할 수 있습니다. 소유자가 그룹에서 탈퇴하면 모든 구성원과 함께 그룹도 자동으로 삭제되도록하는 구현을 원한다고 가정합니다. (내가 틀렸다면 정정하십시오.)이 경우 추가 할 수 있습니다 dependent: :destroy.has_many :cliq_memberships

current_user가 소유자 인 경우 cliq를 완전히 파괴하면 cliq_membership도 파괴됩니다.

CliqMemershipsController의 파괴 액션에서 이렇게 할 수 있습니다.

def destroy
    @cliq_membership = current_user.cliq_memberships.find(params[:id])
    @cliq = @cliq_membership.cliq
    if @cliq.owner == current_user
        @cliq.destroy
        flash[:notice] = "The Cliq is destroyed"
        redirect_to user_path(current_user)
    else
        # destroy only the membership
        flash[:notice] = "You left the Cliq."
        redirect_to user_path(current_user)
    end
end

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파일의 그룹 소유권 변경-사용자 관리

분류에서Dev

파일의 그룹 소유권 변경-사용자 관리

분류에서Dev

파일 권한에서 사용자 및 그룹 소유자의 우선 순위

분류에서Dev

그룹 사용자로 파일 소유권 변경

분류에서Dev

Linux의 파일에 대한 권한은 소유자 그룹의 사용자가 변경할 수 없습니다.

분류에서Dev

Linux의 파일에 대한 권한은 소유자 그룹의 사용자가 변경할 수 없습니다.

분류에서Dev

Ruby on rails : 많은 사용자와 한 명의 소유자로 그룹 만들기

분류에서Dev

중첩 된 AD 그룹에서 사용자 멤버십 확인

분류에서Dev

사용자 지정 리소스 resw 파일의 모든 권한 (읽기 / 쓰기) 방법 (유니버설 Windows)

분류에서Dev

내부 편집을 사용하여 Sed가 파일의 그룹 소유권을 변경합니다.

분류에서Dev

Graph SDK를 사용하여 사용자의 전 이적 그룹 멤버십 필터링

분류에서Dev

멤버 변수의 파괴 방지

분류에서Dev

사용자 postgres는 권한 및 그룹 멤버십이 제공된 후에도 드라이브에 액세스 할 수 없습니다.

분류에서Dev

사용자를 그룹화하여 그룹의 각 사용자에게 유사한 파일 권한을 부여하는 방법

분류에서Dev

동일한 폴더의 소유자, 그룹 및 모두에 대해 별도의 파일 권한 설정

분류에서Dev

/ var 아래에있는 모든 파일의 기본 그룹 / 사용자 소유권을 복원하는 방법은 무엇입니까?

분류에서Dev

정확히 일치하는 특정 사용자 그룹 멤버십 검색

분류에서Dev

Ruby on Rails-그룹의 사용자

분류에서Dev

사용자의 그룹 멤버십을 반복하고 그룹 목록의 구성원 인 경우 사용자를 반환하는 방법

분류에서Dev

다른 목록의 멤버십 순서에 따라 목록 요소 그룹화

분류에서Dev

rpmbuild가 잘못된 파일 소유권을 설정하면 root : root (잘못된 소유자 / 그룹 빌드 : 사용자)가 표시됩니다.

분류에서Dev

유사한 문자 그룹을 버리는 동안 c의 출력 파일

분류에서Dev

사용자의 멤버십 역할 업데이트

분류에서Dev

그룹 소유자 www-data로서의 파일 / 폴더 및 다른 사용자로서의 SFTP

분류에서Dev

Mac 파일 권한에서 사용자와 그룹의 차이점

분류에서Dev

사용자 / 수퍼 유저는 어떤 상황에서 소유자의 파일 권한을 변경합니까?

분류에서Dev

Linux의 그룹 소유권

분류에서Dev

SAML : 그룹 멤버십

분류에서Dev

사용자 지정 멤버십 생성 후 사용자 자동 로그인 (마법사 사용 안함)

Related 관련 기사

  1. 1

    파일의 그룹 소유권 변경-사용자 관리

  2. 2

    파일의 그룹 소유권 변경-사용자 관리

  3. 3

    파일 권한에서 사용자 및 그룹 소유자의 우선 순위

  4. 4

    그룹 사용자로 파일 소유권 변경

  5. 5

    Linux의 파일에 대한 권한은 소유자 그룹의 사용자가 변경할 수 없습니다.

  6. 6

    Linux의 파일에 대한 권한은 소유자 그룹의 사용자가 변경할 수 없습니다.

  7. 7

    Ruby on rails : 많은 사용자와 한 명의 소유자로 그룹 만들기

  8. 8

    중첩 된 AD 그룹에서 사용자 멤버십 확인

  9. 9

    사용자 지정 리소스 resw 파일의 모든 권한 (읽기 / 쓰기) 방법 (유니버설 Windows)

  10. 10

    내부 편집을 사용하여 Sed가 파일의 그룹 소유권을 변경합니다.

  11. 11

    Graph SDK를 사용하여 사용자의 전 이적 그룹 멤버십 필터링

  12. 12

    멤버 변수의 파괴 방지

  13. 13

    사용자 postgres는 권한 및 그룹 멤버십이 제공된 후에도 드라이브에 액세스 할 수 없습니다.

  14. 14

    사용자를 그룹화하여 그룹의 각 사용자에게 유사한 파일 권한을 부여하는 방법

  15. 15

    동일한 폴더의 소유자, 그룹 및 모두에 대해 별도의 파일 권한 설정

  16. 16

    / var 아래에있는 모든 파일의 기본 그룹 / 사용자 소유권을 복원하는 방법은 무엇입니까?

  17. 17

    정확히 일치하는 특정 사용자 그룹 멤버십 검색

  18. 18

    Ruby on Rails-그룹의 사용자

  19. 19

    사용자의 그룹 멤버십을 반복하고 그룹 목록의 구성원 인 경우 사용자를 반환하는 방법

  20. 20

    다른 목록의 멤버십 순서에 따라 목록 요소 그룹화

  21. 21

    rpmbuild가 잘못된 파일 소유권을 설정하면 root : root (잘못된 소유자 / 그룹 빌드 : 사용자)가 표시됩니다.

  22. 22

    유사한 문자 그룹을 버리는 동안 c의 출력 파일

  23. 23

    사용자의 멤버십 역할 업데이트

  24. 24

    그룹 소유자 www-data로서의 파일 / 폴더 및 다른 사용자로서의 SFTP

  25. 25

    Mac 파일 권한에서 사용자와 그룹의 차이점

  26. 26

    사용자 / 수퍼 유저는 어떤 상황에서 소유자의 파일 권한을 변경합니까?

  27. 27

    Linux의 그룹 소유권

  28. 28

    SAML : 그룹 멤버십

  29. 29

    사용자 지정 멤버십 생성 후 사용자 자동 로그인 (마법사 사용 안함)

뜨겁다태그

보관