I don't like having the type-specific parts in the function here.  Model classes should be responsible for reporting whether actions are allowed or not, so if e.g. GDrive models have to have a permission override applied, I don't have to manipulate the Permission class and do an aspect around this function.