mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-16 14:17:00 +08:00
46 lines
1.5 KiB
Ruby
46 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
Canaid::Permissions.register_for(Result) do
|
|
can :read_result do |user, result|
|
|
can_read_my_module?(user, result.my_module)
|
|
end
|
|
|
|
can :manage_result do |user, result|
|
|
!result.archived? &&
|
|
!result.my_module.archived_branch? &&
|
|
result.my_module.permission_granted?(user, MyModulePermissions::RESULTS_MANAGE)
|
|
end
|
|
|
|
can :restore_result do |user, result|
|
|
result.archived? &&
|
|
!result.my_module.archived_branch? &&
|
|
result.my_module.permission_granted?(user, MyModulePermissions::RESULTS_MANAGE)
|
|
end
|
|
|
|
can :delete_result do |user, result|
|
|
result.archived? &&
|
|
!result.my_module.archived_branch? &&
|
|
result.unlocked?(result) &&
|
|
result.my_module.permission_granted?(user, MyModulePermissions::RESULTS_DELETE_ARCHIVED)
|
|
end
|
|
end
|
|
|
|
Canaid::Permissions.register_for(ResultComment) do
|
|
# Module, its experiment and its project must be active for all the specified
|
|
# permissions
|
|
%i(manage_result_comment)
|
|
.each do |perm|
|
|
can perm do |_, comment|
|
|
!comment.result.my_module.archived_branch? && comment.result.active?
|
|
end
|
|
end
|
|
|
|
# module: update/delete comment
|
|
# result: update/delete comment
|
|
# step: update/delete comment
|
|
can :manage_result_comment do |user, comment|
|
|
my_module = comment.result.my_module
|
|
(comment.user == user && my_module.permission_granted?(user, MyModulePermissions::RESULTS_COMMENTS_MANAGE_OWN)) ||
|
|
my_module.permission_granted?(user, MyModulePermissions::RESULTS_COMMENTS_MANAGE)
|
|
end
|
|
end
|