(regarding SFSUserRolePermissionInfo view)...This shouldn't be the case, it was designed to be inclusive of all permission info regardless of source.
I don't see how. The view does not reference (in the FROM clause) the SFSUsersXPermissions table, which is where users are directly assigned permissions (if I understand the schema correctly). It only references SFSUsersXRoles table, which ties users to roles.
It seems to me that the only way to get all the permissions assigned to a user is to:
1. Get permissions from SFSUserRolePermissionInfo, which will list all permissions assigned via role.
2. Resolve any permissions that are duplicated at the role level, such that only one permission finally exists with the highest action winning (grant, read-only, block in that order).
3. Get permissions from SFSUserPermissionInfo, which will list all permissions assigned directly to the user.
4. Check permissions assigned by role to see if they are overridden at the user level (change action).
5. Add any permissions assigned at user level that aren't assigned via a role.
Based on the context we are discussing here (managing user permissions/roles outside the context of the CurrentLoggedInUser), I am ignoring restriction sets, which are only applicable at runtime for the current user.
This means either a sproc or code in a BO. No simple view will cut it. As I'm learning the SF way, I'm inclined to use a BO to do this.
If I understand how things work correctly