add requirePermission function to Context
updated EmptyCall docs
fix DatabaseException
prevent duplicate permissions to same user
add permission_grant API + call