mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 11:50:49 +08:00
init project
This commit is contained in:
43
app/models/concerns/project_operable.rb
Normal file
43
app/models/concerns/project_operable.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
module ProjectOperable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
has_many :members
|
||||
# has_many :except_owner_members, -> { members.where("members.use_id != ? ", self.owner.id ) }
|
||||
has_many :manager_members, -> { joins(:roles).where(roles: { name: 'Manager' }) }, class_name: 'Member'
|
||||
end
|
||||
|
||||
def add_member!(user_id, role_name='Developer')
|
||||
member = members.create!(user_id: user_id)
|
||||
set_developer_role(member)
|
||||
end
|
||||
|
||||
def remove_member!(user_id)
|
||||
member = members.find_by(user_id: user_id)
|
||||
member.destroy! if member && self.user_id != user_id
|
||||
end
|
||||
|
||||
def member?(user_id)
|
||||
members.exists?(user_id: user_id)
|
||||
end
|
||||
|
||||
# 除了项目创建者本身
|
||||
def member(user_id)
|
||||
members.where.not("members.user_id = ? ", owner.id).find_by(user_id: user_id)
|
||||
end
|
||||
|
||||
def change_member_role!(user_id, role)
|
||||
member = self.member(user_id)
|
||||
member.member_roles.last.update_attributes!(role: role)
|
||||
end
|
||||
|
||||
def owner?(user)
|
||||
self.owner == user
|
||||
end
|
||||
|
||||
def set_developer_role(member)
|
||||
role = Role.find_by_name 'Developer'
|
||||
member.member_roles.create!(role: role)
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user