<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Defining Permissions</title><link>https://community.telligent.com/community/11/w/developer-training/65110/defining-permissions</link><description /><dc:language>en-US</dc:language><generator>14.0.0.586 14</generator><item><title>Defining Permissions</title><link>https://community.telligent.com/community/11/w/developer-training/65110/defining-permissions</link><pubDate>Tue, 04 Aug 2020 21:33:53 GMT</pubDate><guid isPermaLink="false">8c0a8b1f-9b8f-4457-90a2-034127f8d49e</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65110/defining-permissions#comments</comments><description>Current Revision posted to Developer Training by Former Member on 08/04/2020 21:33:53&lt;br /&gt;
&lt;p&gt;Permissions can be granted to site, group and application levels to control access to each area of the community.&amp;nbsp;The platform&amp;nbsp;allows you to create and define your own set of permissions. These permissions contain default configurations and can be later configured by a group owner or administrator.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Why_Should_I_Create_Permissions" name="Why_Should_I_Create_Permissions"&gt;&lt;/a&gt;Why Should I Create Permissions?&lt;/h2&gt;
&lt;p&gt;When creating a solution that requires the platform to grant or restrict access to users&amp;nbsp;on&amp;nbsp;a site, group,&amp;nbsp;or application level,&amp;nbsp;then an [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistar]] can be implemented.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Creating_a_Permission" name="Creating_a_Permission"&gt;&lt;/a&gt;Creating a Permission&lt;/h2&gt;
&lt;p&gt;To add support for creating permissions you need to implement the [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistar]] interface. The [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistrar]] must be implemented along with the [[api-documentation:IPermission Plugin Supplementary Type|IPermission]] interface and is defined in the Telligent.Evolution.Extensibility.Security.Version1 namespace of Telligent.Evolution.Core.dll.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;using System;
using Telligent.Evolution.Api.Content;
using Telligent.Evolution.Extensibility.Security.Version1;

namespace Samples
{
    public class SamplePermissions : IPermissionRegistrar
    {
        #region IPlugin

        //...

        #endregion

        #region IPermissionRegistrar

        //...

        #endregion
    }

    public class SamplePermission : IPermission
    {
        //...
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Setup the &lt;code&gt;RegisterPermissions&lt;/code&gt; method and begin by&amp;nbsp;generating a new Guid for the permission ID. If creating a custom application make sure the application ID matches the one that was created. In this sample a generic ID was applied. Select a meaningful name and description. Then determine the default configuration by creating a new [[api-documentation:PermissionConfiguration Plugin Supplementary Type|PermissionConfiguration]].&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;[[api-documentation:PermissionConfiguration Plugin Supplementary Type|PermissionConfiguration]] sets the default configuration that is applied to each group type. Default permissions are automatically setup when the plugin is enabled. The group types are configured by&amp;nbsp;implementing [[api-documentation:JoinlessGroupPermissionConfiguration Plugin Supplementary Type|JoinlessGroupPermissionConfiguration]] for Joinless groups and&amp;nbsp;[[api-documentation:MembershipGroupPermissionConfiguration Plugin Supplementary Type|MembershipGroupPermissionConfiguration]] for all other group types. A Boolean value will determine if the Everyone, Managers, Members, Owners and RegisteredUsers&amp;nbsp;roles will be assigned your permission.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public void RegisterPermissions(IPermissionRegistrarController permissionController)
{
    permissionController.Register(new SamplePermission(
        new Guid(&amp;quot;29547B66-9D04-4659-A010-5A861A0CBFCC&amp;quot;),
        &amp;quot;Create Content&amp;quot;,
        &amp;quot;Enables users to create content.&amp;quot;,
        ContentTypes.GenericContent,
        new PermissionConfiguration
        {
            Joinless = new JoinlessGroupPermissionConfiguration { Administrators = true, Owners = true },
            PublicOpen = new MembershipGroupPermissionConfiguration { Owners = true },
            PublicClosed = new MembershipGroupPermissionConfiguration { Owners = true },
            PrivateListed = new MembershipGroupPermissionConfiguration { Owners = true },
            PrivateUnlisted = new MembershipGroupPermissionConfiguration { Owners = true },
        }));

        //Register more permissions
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;To register a permission an [[api-documentation:IPermission Plugin Supplementary Type|IPermission]] needs to be implemented. A Guid ID is a&amp;nbsp;unique for each permission. Select a name and description that describes the permission you are creating. An applicationTypeId is an ID from a predefined application. Finally the&amp;nbsp;[[api-documentation:PermissionConfiguration Plugin Supplementary Type|PermissionConfiguration]] is the default configuration for the permission mentioned earlier.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public class SamplePermission : IPermission
{
    public SamplePermission(Guid id, string name, string description, Guid applicationTypeId, PermissionConfiguration defaultConfiguration)
    {
        Id = id;
        Name = name;
        Description = description;
        ApplicationTypeId = applicationTypeId;
        DefaultConfiguration = defaultConfiguration;
    }

    public Guid Id { get; private set; }
    public string Name { get; private set; }
    public string Description { get; private set; }
    public Guid ApplicationTypeId { get; private set; }
    public PermissionConfiguration DefaultConfiguration { get; private set; }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Here is the complete sample.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/SamplePermissions_2E00_cs"&gt;community.telligent.com/.../SamplePermissions_2E00_cs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is how the permission are displayed in the group administration panel under Manage Group &amp;gt; Permissions &amp;gt; {Site/Group Role Tab} &amp;gt; {Role}.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Permissions.png"&gt;&lt;img alt=" " src="/resized-image/__size/320x240/__key/communityserver-wikis-components-files/00-00-00-12-83/Permissions.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Fine_tuning_permissions" name="Fine_tuning_permissions"&gt;&lt;/a&gt;Fine tuning permissions&lt;/h2&gt;
&lt;p&gt;There are times when granting permissions isn&amp;#39;t &amp;quot;all or nothing&amp;quot;. For example, in an out-of-the-box installation, a user is allowed to edit their own forum posts, but only for a limited time. With a simple permission, the forum application would have to either grant the user the ability to edit all forum posts at all times or never edit any forum posts at any time.&amp;nbsp;The ILogicPermission&amp;nbsp;interface is the solution for this type of scenario.&lt;/p&gt;
&lt;p&gt;This sample uses a &lt;code&gt;Func&amp;lt;&amp;gt;&lt;/code&gt; delegate to represent the IsGranted method. This allows your implementation of the [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistrar]] to have control of the &lt;code&gt;ILogicPermission&lt;/code&gt; implementation.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public class SampleLogicPermission : SamplePermission, ILogicPermission
{
    private readonly Func&amp;lt;User, IContent, bool, bool&amp;gt; _isGrantedFunction;

    public SampleLogicPermission(Guid id, string name, string description, Guid applicationTypeId, PermissionConfiguration defaultConfiguration) 
        : base(id, name, description, applicationTypeId, defaultConfiguration) { }

    public bool IsGranted(User user, IContent content, bool isGrantedBySystem)
    {
        return _isGrantedFunction(user, content, isGrantedBySystem);
    }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: IPermissionRegistrar, permissions&lt;/div&gt;
</description></item><item><title>Defining Permissions</title><link>https://community.telligent.com/community/11/w/developer-training/65110/defining-permissions/revision/1</link><pubDate>Thu, 13 Jun 2019 19:28:40 GMT</pubDate><guid isPermaLink="false">8c0a8b1f-9b8f-4457-90a2-034127f8d49e</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65110/defining-permissions#comments</comments><description>Revision 1 posted to Developer Training by Ben Tiedt on 06/13/2019 19:28:40&lt;br /&gt;
&lt;p&gt;Permissions can be granted to site, group and application levels to control access to each area of the community.&amp;nbsp;The platform&amp;nbsp;allows you to create and define your own set of permissions. These permissions contain default configurations and can be later configured by a group owner or administrator.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Why_Should_I_Create_Permissions" name="Why_Should_I_Create_Permissions"&gt;&lt;/a&gt;Why Should I Create Permissions?&lt;/h2&gt;
&lt;p&gt;When creating a solution that requires the platform to grant or restrict access to users&amp;nbsp;on&amp;nbsp;a site, group,&amp;nbsp;or application level,&amp;nbsp;then an [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistar]] can be implemented.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Creating_a_Permission" name="Creating_a_Permission"&gt;&lt;/a&gt;Creating a Permission&lt;/h2&gt;
&lt;p&gt;To add support for creating permissions you need to implement the [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistar]] interface. The [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistrar]] must be implemented along with the [[api-documentation:IPermission Plugin Supplementary Type|IPermission]] interface and is defined in the Telligent.Evolution.Extensibility.Security.Version1 namespace of Telligent.Evolution.Core.dll.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;using System;
using Telligent.Evolution.Api.Content;
using Telligent.Evolution.Extensibility.Security.Version1;

namespace Samples
{
    public class SamplePermissions : IPermissionRegistrar
    {
        #region IPlugin

        //...

        #endregion

        #region IPermissionRegistrar

        //...

        #endregion
    }

    public class SamplePermission : IPermission
    {
        //...
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Setup the &lt;code&gt;RegisterPermissions&lt;/code&gt; method and begin by&amp;nbsp;generating a new Guid for the permission ID. If creating a custom application make sure the application ID matches the one that was created. In this sample a generic ID was applied. Select a meaningful name and description. Then determine the default configuration by creating a new [[api-documentation:PermissionConfiguration Plugin Supplementary Type|PermissionConfiguration]].&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;[[api-documentation:PermissionConfiguration Plugin Supplementary Type|PermissionConfiguration]] sets the default configuration that is applied to each group type. Default permissions are automatically setup when the plugin is enabled. The group types are configured by&amp;nbsp;implementing [[api-documentation:JoinlessGroupPermissionConfiguration Plugin Supplementary Type|JoinlessGroupPermissionConfiguration]] for Joinless groups and&amp;nbsp;[[api-documentation:MembershipGroupPermissionConfiguration Plugin Supplementary Type|MembershipGroupPermissionConfiguration]] for all other group types. A Boolean value will determine if the Everyone, Managers, Members, Owners and RegisteredUsers&amp;nbsp;roles will be assigned your permission.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public void RegisterPermissions(IPermissionRegistrarController permissionController)
{
    permissionController.Register(new SamplePermission(
        new Guid(&amp;quot;29547B66-9D04-4659-A010-5A861A0CBFCC&amp;quot;),
        &amp;quot;Create Content&amp;quot;,
        &amp;quot;Enables users to create content.&amp;quot;,
        ContentTypes.GenericContent,
        new PermissionConfiguration
        {
            Joinless = new JoinlessGroupPermissionConfiguration { Administrators = true, Owners = true },
            PublicOpen = new MembershipGroupPermissionConfiguration { Owners = true },
            PublicClosed = new MembershipGroupPermissionConfiguration { Owners = true },
            PrivateListed = new MembershipGroupPermissionConfiguration { Owners = true },
            PrivateUnlisted = new MembershipGroupPermissionConfiguration { Owners = true },
        }));

        //Register more permissions
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;To register a permission an [[api-documentation:IPermission Plugin Supplementary Type|IPermission]] needs to be implemented. A Guid ID is a&amp;nbsp;unique for each permission. Select a name and description that describes the permission you are creating. An applicationTypeId is an ID from a predefined application. Finally the&amp;nbsp;[[api-documentation:PermissionConfiguration Plugin Supplementary Type|PermissionConfiguration]] is the default configuration for the permission mentioned earlier.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public class SamplePermission : IPermission
{
    public SamplePermission(Guid id, string name, string description, Guid applicationTypeId, PermissionConfiguration defaultConfiguration)
    {
        Id = id;
        Name = name;
        Description = description;
        ApplicationTypeId = applicationTypeId;
        DefaultConfiguration = defaultConfiguration;
    }

    public Guid Id { get; private set; }
    public string Name { get; private set; }
    public string Description { get; private set; }
    public Guid ApplicationTypeId { get; private set; }
    public PermissionConfiguration DefaultConfiguration { get; private set; }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Here is the complete sample.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/SamplePermissions_2E00_cs"&gt;community.telligent.com/.../SamplePermissions_2E00_cs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is how the permission are displayed in the group administration panel under Manage Group &amp;gt; Permissions &amp;gt; {Site/Group Role Tab} &amp;gt; {Role}.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/Permissions.png"&gt;&lt;img src="/resized-image/__size/320x240/__key/communityserver-wikis-components-files/00-00-00-12-83/Permissions.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Fine_tuning_permissions" name="Fine_tuning_permissions"&gt;&lt;/a&gt;Fine tuning permissions&lt;/h2&gt;
&lt;p&gt;There are times when granting permissions isn&amp;#39;t &amp;quot;all or nothing&amp;quot;. For example, in an out-of-the-box installation, a user is allowed to edit their own forum posts, but only for a limited time. With a simple permission, the forum application would have to either grant the user the ability to edit all forum posts at all times or never edit any forum posts at any time.&amp;nbsp;The ILogicPermission&amp;nbsp;interface is the solution for this type of scenario.&lt;/p&gt;
&lt;p&gt;This sample uses a &lt;code&gt;Func&amp;lt;&amp;gt;&lt;/code&gt; delegate to represent the IsGranted method. This allows your implementation of the [[api-documentation:IPermissionRegistrar Plugin Type|IPermissionRegistrar]] to have control of the &lt;code&gt;ILogicPermission&lt;/code&gt; implementation.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public class SampleLogicPermission : SamplePermission, ILogicPermission
{
    private readonly Func&amp;lt;User, IContent, bool, bool&amp;gt; _isGrantedFunction;

    public SampleLogicPermission(Guid id, string name, string description, Guid applicationTypeId, PermissionConfiguration defaultConfiguration) 
        : base(id, name, description, applicationTypeId, defaultConfiguration) { }

    public bool IsGranted(User user, IContent content, bool isGrantedBySystem)
    {
        return _isGrantedFunction(user, content, isGrantedBySystem);
    }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>