The table you have created makes sense, but I would recommend switching the X and Y axes. You will most likely have fewer roles than feature sets that you would need to assign permissions to. For example, you may have 3-5 (Admin, Manager and End User, etc) roles, but multiple modules that each have Read, Write, Delete, Admin. You may be adding additional modules in the future.
By switching the axes, you are minimising the need for scrolling horizontally, and allowing the user to scroll vertically instead. This might be preferred.
Another option is to use a "tree structure with checkboxes" instead of a regular table. The tree structure will allow you to create additional dimensions. This would be recommended for larger scale applications. Each role could have its own tree structure.