• 8 Posts
  • 44 Comments
Joined 1 year ago
cake
Cake day: January 21st, 2024

help-circle
  • I personally try to avoid deeply nested if/else. Or else in general, because I think it makes code more readable. Especially when one of the branches is just an exit condition.

    if exitCondition {
        return false
    }
    // long ass code execution
    

    is way more readable than

    if !exitCondition {
        // long ass code execution
    } else {
       return false
    }
    

    In a loop, you can just return the value instead of passing it to a “retVal” variable.

    With those in mind, you could refactor HasPermissions to

    func (r *RBAC) HasPermission(assignedRoles []string, requiredPermission string, visited map[string]bool) bool {
    	for _, assigned := range assignedRoles {
    		if visited[assigned] {
    			continue
    		}
    		role, ok := r.Roles[assigned]
    		if !ok {
    			//role does not exist, so skip it
    			continue
    		}
    		for _, permission := range role.Permissions {
    			if permission.String() == requiredPermission {
    				//Permission has been found! Set permitted to true and bust out of the loop
    				return true
    			}
    		}
    		//check inherited roles
    		if permitted := r.HasPermission(role.Inherits, requiredPermission, visited); permitted {
    			return true
    		}
    	}
    	return false
    }
    

    The same could be applied to LoadJSONFile and I think that really would approve the readability and maintainability of your code.

    edit: This refactor is not tested






















  • The best way to learn Linux for ne was to make comparison table to all the distros and to look for what I want to make decision. Whenever I got questions, I asked ChatGPT. Then, the biggest step, was just using it. As my Daily Driver. I tried dual booting / a second “tinkering laptop” and it did just not work for me.

    Now I am happy and keep learning all the small details.

    Feels like when I was young and got my first PC.