Packages
ami
0.1.9
0.3.9
0.3.8
retired
0.3.7
retired
0.3.6
retired
0.3.5
retired
0.3.4
retired
0.3.3
retired
0.3.2
retired
0.3.1
retired
0.3.0
retired
0.2.9
retired
0.2.8
retired
0.2.7
retired
0.2.6
retired
0.2.5
retired
0.2.3
retired
0.2.2
retired
0.2.1
retired
0.2.0
retired
0.1.9
retired
0.1.8
retired
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
Package containing all AMI Models shared between micro-services.
Retired package: Security issue - retiring
Current section
Files
Jump to
Current section
Files
lib/ami/heimdall.ex
defmodule Ami.Heimdall do
import Ecto.{Query}
alias Ami.{
Tag,
Repo,
Role,
User,
Quiz,
Unit,
Video,
Course,
Answer,
Lesson,
Package,
Resource,
UnitLesson,
CoursePeriod,
CourseResource,
ResourceAttachment,
ThumbImageAttachment,
TeaserImageAttachment,
AffiliateLogoAttachment
}
@rules %{
:admin => %{ crud: :all, clone: :all},
:instructor => %{},
:community_moderator => %{
read: [
{Community, %{}}
],
create: [
{Course, %{}},
],
update: [
{Course, %{required: [:community_id]}},
{}
],
clone: [],
delete: [
{Course, %{required: [:community_id]}}
]
},
:learning_facilitator => %{},
:buddy => %{},
:accountibility_partner => %{},
:respondent => %{},
:system_admin => %{}
}
def can?(%User{}= user, action, struct) do
cond do
Role.has_any_role?(user, [:admin, :sytem_admin]) ->
true
Role.has_role?(user, :community_moderator) ->
case Enum.find(@rules[:community_moderator][action], fn({model, opts}) -> model == struct.__struct__ end) do
{model, opts} ->
if is_nil(opts[:required]) do
true
else
Enum.all?(opts[:required], fn attr -> !is_nil(Map.get(struct, attr)) end)
end
_ -> false
end
end
end
end