Manage Roles
2 2

21 posts in this topic

We start testing it and we have a couple of issues:

1. Roles can be deleted even if they are in use.

2. Multiple roles can be created with the same name and type.

3. Roles can not be created via API:

session.create('SecurityRole', {"name": name, "type": role_type})
ftrack_api.session.Session> ERROR | 2016/12/22 16:29:30.990 (MainThread)|Server reported error: TypeError('NoneType' object is not iterable)

4. Roles can not be deleted via API:

ftrack_api.session.Session> ERROR | 2016/12/22 17:54:27.930 (MainThread)|Server reported error: PermissionError(Permission denied: not allowed to 'delete' 'Auth_Role'. Operation 'delete' can never be done on 'Auth_Role'.)

5. Can not add and then get added roles in the same session:

user = session.query("User where username is '%s'" % (username)).first()
role = session.query("SecurityRole where name is '%s'" % (role_name)).first()
is_all_projects = True
project = None
               {"user_id": user['id'],
                "is_all_projects": is_all_projects,
                "security_role_id": role['id'],
                "projects": projects})
user = session.query("User where username is '%s'" % (username)).first()
user_roles = user['user_security_roles']
print role in user_roles


If I check in the Ftrack web interface the role is added to the user.

6. Can't get user security roles:

    raise ftrack_api.exception.ServerError(error_message)
ServerError: Server reported error: KeyError(u'role_id')

I think it should be security_role_id instead of role_id.

Share this post

Link to post
Share on other sites

Hi Remus,

we currently only support managing UserSecurityRoles via the API. So basically assigning existing roles to users.

Regarding point 5, that is a misstake from our side in the schema. Will fix that and until then you can work around it by specifying what to query like this:

session.query('select user_id, security_role_id from UserSecurityRole').all()

to avoid it using the defaults which include a typo.


And for 6, you should also explicitly query the relation to ensure it is being updates.

"select user_security_roles from User"


Let me know if that helps.


Share this post

Link to post
Share on other sites

No, It doesn't. 

Instead clearing the cache and querying the data again works.

> print len(user['user_security_roles'])
> del user['user_security_roles']
> user = get_ftrack_user(username="unittest_artist")
> print len(user['user_security_roles'])
> session.cache.clear()
> user = get_ftrack_user(username="unittest_artist")
> print len(user['user_security_roles'])


Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
2 2